2015-02-15 7 views
21

Ich verwende zwei Datenbankadapter mit Segeln.der Haken orm dauert zu lange zum Laden

eine für mondoDB und zweite für mysql.whenever laufen i Befehl „Segel heben“ .Sobald ein Fehler ohne Änderungen

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 

wenn ich Segel erneut ausführen, gibt es keinen Fehler gibt then.how i dies zu vermeiden kann Fehler everytime.this ist meine erste Erfahrung mit sailsjs so wird jede Hilfe apreciated ....

+0

welche Version von Segel, wie viele Modelle haben Sie? Veröffentlichen Sie einen Code. Das ist nicht genug Info. –

+0

sails version ist 0.11.0.und ich habe console's output gepostet.was sonst noch benötigt wird? –

+0

Wie viele Modelle hast du? –

Antwort

0

Sie node_modules Ordner gehen und zu \sails\lib\app\private

In Ihrem Fall sehen Sie in diesem Ordner gehen sollte: C:\Users\KAMI\AppData\Roaming\npm\node_modules\sails\lib\app\private

dann die Datei loadHooks.js Namen öffnen und auf die Zeile gehen, der sagt:

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

Ändern Sie den letzten Wert in dieser Zeile von 20000 bis zu einem gewissen höheren Wert und speichern Sie die Datei dann Ihre Anwendung ausführen, indem " Segel heben "wie Sie normalerweise tun

Hinweis: Sie müssen möglicherweise ein paar höhere Werte anstelle von 20000 ausprobieren, bis Sie einen Wert erreichen, der für Sie arbeitet. Meine Anwendung wurde erfolgreich aufgehoben, als ich den Wert in 50000 änderte

+0

es half vielen ... kann man Logik hinter sich lassen.? –

+0

Manchmal benötigt der ORM-Hook (Ihr Datenbankadapter/Plugin) mehr Zeit, um beim Start der App geladen zu werden. Sails legt jedoch ein Standard-Zeitlimit von 20 Sekunden fest, wenn die Hook-Konfiguration kein definiertes Zeitlimit zum Laden enthält (wie in unserem Fall hier). Also haben wir einfach das Standard-Timeout-Limit für Segelsets erhöht. @Niya –

+0

Danke viel ... @ Hesham –

36

Ich habe dieses Problem letzte Nacht wegen einer langsamen Internetverbindung zwischen meinem Laptop und dem DB-Server. Meine Lösung war, eine neue Datei im Konfigurationsverzeichnis namens orm.js zu erstellen (Name spielt keine Rolle).

dann den folgenden Code hinzu:

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

Ich musste ich mein PubSub Timeout ändern auch gefunden, aber das für Sie nicht notwendig sein.

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

Hinweis: Die andere Antwort empfiehlt innerhalb des node_modules Ordner, um die Segel-Dateien zu ändern. Dies ist fast immer eine schlechte Idee, weil alle npm update Ihre Änderungen zurücksetzen können.

+0

Das hat perfekt für mich funktioniert. In meinem Fall lief ich mit einem Raspberry Pi Model B, also musste ich orm und pubsub Hook Timeouts auf 120000ms setzen, da es immer noch den Fehler bei 60000ms geben würde – 0x0

+0

Ich musste das config/pubsub.js Event für einen lokalen hinzufügen MySQL DB. Ich brauchte es, weil ich migrage eingestellt habe: 'alter', um eine Spalte in einer Tabelle hinzuzufügen. –

21

Es ist wahrscheinlich am besten, dies auf einer pro-env-Basis zu tun.

env path

Geben Sie dann innerhalb module.exports jeder: Unter config, Sie so etwas wie haben

module.exports = { 

    hookTimeout: 40000 

} 

Hinweis, gibt es keine Notwendigkeit für einen Unterstrich vor dem Attribut Name entweder.

+0

Ich mache das, Und immer noch den gleichen Fehler. Könnte es die Zeit selbst sein?oder sollte ich das HookTimeout in ein Orm-Objekt einfügen? –

1

Es gibt zwei Möglichkeiten, die wir vielleicht als anrufen:

1- Systemweite Methode: (wie @arcseldon gesagt hat)

Versuchen Sie, die hookTimeout Schlüssel hinzufügen Die Datei config/env/development.js oder config/env/production.js des Projekts.Als nächstes rufen fast alle Hooks (außer einigen Hooks, wie Modullader) den Timeout-Wert ab und betrachten ihn für sich selbst.

2- Haken spezifische Methode: (wie @davepreston gesagt hat)

erstellen [Modulname] js-Datei in der Config-Ordner des Projekts und fügen Sie _hookTimeout Schlüssel zu. Dies führt dazu, dass der Timeout-Wert nur diesem spezifischen Modul zugewiesen wird. (Seien Sie vorsichtig über die spezifische JSON-Struktur für die Segel-Konfigurationsdateien.)

8

Ich weiß, das ist eine ziemlich alte Frage, aber ich hatte auch das gleiche Problem. Ich war überzeugt, dass es nicht meine Verbindung war.

Meine Lösung ist Ihre Migrationsoption für Ihre Modelle zu ändern, und Sie werden eine Auswahl von 3

  1. sicher haben - nie meine Datenbank Auto-Migration (s). Ich werde es selbst tun (von Hand)
  2. ändern - Auto-Migrate, sondern versuchen, meine vorhandenen Daten (experimentell)
  3. Tropfen zu halten - Wisch-/Drop meiner Daten ALL und wieder aufzubauen Modelle jedes Mal, wenn ich Segel heben

Got zu config/models.js und dort in setzen:

migrate: 'safe' 

oder was auch immer Option von oben die Sie verwenden möchten.

+0

Nur ein 'ich auch!' - Ich habe immer eine Zeitüberschreitung erhalten, aber ich habe die Migration auf sicher geändert und das Standard-Timeout von 20 Sekunden funktioniert – James

0

Zum models.js Datei und uncomment Migrate: 'verändern'