Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

i am using two database adapters with sails.

one for mondoDB and second for mysql.whenever i run command "sails lift".once it gives an error

error: Error: The hook `orm` is taking too long to load.
Make sure it is triggering its `initialize()` callback, or else set       `sails.config.orm._hookTimeout to a higher value (currently 20000)
at tooLong [as _onTimeout]   (C:\Users\KAMI\AppData\Roaming\npm\node_modules\sails\lib\app\private\loadHooks.js:92:21)
at Timer.listOnTimeout [as ontimeout] (timers.js:110:15

when i rerun sails without changes it gives no error then.how can i avoid this error everytime.this is my 1st experience with sailsjs so any help will be apreciated....

what version of sails, how many models do you have? Post some code. this is not enough info. – Travis Webb Feb 17, 2015 at 16:16 i am using two db adpterz one for mysql which is having 5 models n one for mongoDB which contains two models chat and user.actually i shifted my project from node to sails.so why orm for mongodb sometimes create problem. – N.A Feb 18, 2015 at 13:58 easiest fix is to add a file called hookTimeout.js under config/ that exports hookTimeout: value where value is number of milliseconds – Paulo Dec 13, 2017 at 12:20

I ran into this problem last night because of a slow internet connection between my laptop and the DB server. My solution was to create a new file in the config directory called orm.js (name doesn't really matter).

Then add the following code:

// config/orm.js
module.exports.orm = {
  _hookTimeout: 60000 // I used 60 seconds as my new timeout

I also found I had to change my pubsub timeout but that may not be necessary for you.

// config/pubsub.js
module.exports.pubsub = {
  _hookTimeout: 60000 // I used 60 seconds as my new timeout

Note: The other answer recommends changing the sails files inside the node_modules folder. This is almost always a bad idea because any npm update could revert your changes.

This worked perfectly for me. In my case, I was running sails on a raspberry pi model B, so I had to set orm and pubsub hook timeouts to 120000ms since it would still get the error at 60000ms – 0x0 Mar 30, 2015 at 9:06 I had to add config/pubsub.js event for a local mysql DB. I needed it because i have setted migrage: 'alter' to add a column in one table. – Mat'arangéÇa Jul 27, 2017 at 0:25 I am doing this, And still get the same error. Could It be the time itself? or should I put the hookTimeout inside an orm object? – Juan Solano Nov 26, 2015 at 15:49

I realise this is quite an old question, but I also had the same problem. I was convinced it wasn't my connection.

My solution is to change your migration option for your models and you'll have a choice of 3

  • safe - never auto-migrate my database(s). I will do it myself (by hand)
  • alter - auto-migrate, but attempt to keep my existing data (experimental)
  • drop - wipe/drop ALL my data and rebuild models every time I lift Sails
  • Got to config/models.js and in there put:

    migrate: 'safe'
    

    or whatever option from above you want to use.

    Just a 'me too!' - I kept getting a timeout, but I changed the migration to safe and the standard timeout of 20 seconds worked – James Apr 18, 2016 at 4:04

    There are two ways, which we can probably call them as:

    1- System-wide method: (as @arcseldon has told)

    Try to add the hookTimeout key to the project's config/env/development.js or config/env/production.js file. Next almost all the hooks (except some hooks, such as moduleloader) will retrieve the timeout value and consider it for themeselves.

    2- Hook specific method: (as @davepreston has told)

    create a [module-name].js file in the project's config folder and add _hookTimeout key to it. So, it will lead into assigning the timeout value only to that specific module. (Be careful about the specific json structure for the sails config files.)

    Go to you node_modules folder and browse to \sails\lib\app\private

    In your case you should go to this folder: C:\Users\KAMI\AppData\Roaming\npm\node_modules\sails\lib\app\private

    Then open the file named loadHooks.js and go to the line that says:

    var timeoutInterval = (sails.config[hooks[id].configKey || id] && sails.config[hooks[id].configKey || id]._hookTimeout) || sails.config.hookTimeout || 20000;
    

    Change the last value in this line from 20000 to some higher value and save the file then run your application by "sails lift" as you normally do

    NB: you may need to try out a few higher values instead of 20000 until you reach a value that works for you. My application successfully lifted when I changed the value to 50000

    Sometimes the ORM hook (your database adapter/plugin) needs more time to be loaded when the app starts. However, Sails sets a default timeout of 20 seconds when the hook configuration doesn't contain a defined timeout for it to load (like our case here). So what we did was simply increasing the default timeout limit that sails sets. @Niya – Hesham Usama Feb 23, 2015 at 16:42 I'd always avoid changing anything in the node_modules folder as those are your dependencies, not your code. @HeshamUsama is right about the problem, but the better place (in my opinion) to change the timeout is in the config within your app. I've added an answer with details on how I solved the problem for my app. – davepreston Mar 5, 2015 at 21:41

    Thanks for contributing an answer to Stack Overflow!

    • Please be sure to answer the question. Provide details and share your research!

    But avoid

    • Asking for help, clarification, or responding to other answers.
    • Making statements based on opinion; back them up with references or personal experience.

    To learn more, see our tips on writing great answers.