web-dev-qa-db-fra.com

l'hameçon prend trop de temps à charger

j'utilise deux adaptateurs de base de données avec des voiles.

une pour mondoDB et une seconde pour mysql.qu’à chaque fois que j’exécute la commande "sails lift", une erreur s’ensuit 

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

quand je rejoue les voiles sans changement, cela ne donne aucune erreur alors. Comment puis-je éviter cette erreur à chaque fois?.

21
N.A

J'ai rencontré ce problème hier soir à cause d'une connexion Internet lente entre mon ordinateur portable et le serveur de base de données. Ma solution a été de créer un nouveau fichier dans le répertoire de configuration appelé orm.js (le nom importe peu).

Puis ajoutez le code suivant:

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

J'ai également constaté que je devais changer mon délai d'attente pubsub, mais cela peut ne pas être nécessaire pour vous.

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

Remarque: L'autre réponse recommande de changer les fichiers de voiles dans le dossier node_modules. C'est presque toujours une mauvaise idée car tout npm update pourrait annuler vos modifications.

37
davepreston

Il est probablement préférable de le faire par env. Sous le répertoire config, vous aurez quelque chose comme:

 env path

Puis entrez, dans module.exports de chacun:

module.exports = {

  hookTimeout: 40000

}

Notez qu'il n'est pas non plus nécessaire de faire un tiret bas devant le nom de l'attribut.

22
arcseldon

Je me rends compte que c’est une question assez ancienne, mais j’ai eu le même problème. J'étais convaincu que ce n'était pas ma connexion.

Ma solution consiste à modifier votre option de migration pour vos modèles et vous aurez le choix entre 3

  1. safe - ne migre jamais automatiquement mes bases de données. Je vais le faire moi-même (à la main) 
  2. alter - auto-migrate, mais tente de conserver mes données existantes (expérimental)
  3. drop - efface/supprime TOUTES mes données et reconstruit les modèles chaque fois que je lève Sails

Il faut arriver à config/models.js et y mettre:

migrate: 'safe'

ou quelle que soit l'option ci-dessus que vous souhaitez utiliser.

9
K20GH

Il y a deux manières, que nous pouvons probablement appeler comme:

1- Méthode à l'échelle du système: (comme @arcseldon l'a dit)

Essayez d’ajouter la clé hookTimeout au fichier config/env/development.js ou config/env/production.js du projet. Ensuite, presque tous les crochets (à l'exception de certains, tels que moduleloader) vont récupérer la valeur de délai d'attente et en tenir compte pour les thèmes eux-mêmes.

2- Méthode spécifique au crochet: (comme @davepreston l'a dit)

créez un fichier [nom-module] .js dans le dossier de configuration du projet et ajoutez-y la clé _hookTimeout. Ainsi, cela conduira à affecter la valeur de délai d'attente uniquement à ce module spécifique. (Faites attention à la structure spécifique de JSON pour les fichiers de configuration des voiles.)

1
Ehsan

Allez dans models.js file et retirez le commentaire migrate: 'alter'

0
Khalil Rahmani

Allez dans votre dossier node_modules et naviguez jusqu’à \sails\lib\app\private

Dans votre cas, vous devriez aller dans ce dossier: C:\Users\KAMI\AppData\Roaming\npm\node_modules\sails\lib\app\private

Ensuite, ouvrez le fichier nommé loadHooks.js et allez à la ligne qui dit:

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

Modifiez la dernière valeur de cette ligne de 20000 à une valeur plus élevée et enregistrez le fichier, puis exécutez votre application avec "sails lift" comme vous le faites

NB: vous devrez peut-être essayer quelques valeurs plus élevées au lieu de 20000 jusqu'à atteindre une valeur qui vous convient. Ma demande a été levée lorsque j'ai modifié la valeur en 50000

0
Hesham Usama