Frage

Ich sehe diesen Absturz jetzt und bin mit der Knotenfaserinfrastruktur nicht vertraut genug, um zu wissen, wo ich anfangen soll, den Fehler zu interpretieren oder den Code zu instrumentieren ...

Meteor server running on: http://localhost:3000/
W202407-10:06:05.740(-8)? (STDERR) /Users/dauser/.meteor/tools/0b2f28e18b/lib/node_modules/fibers/future.js:173
W202407-10:06:07.363(-8)? (STDERR)                      throw(ex);
W202407-10:06:07.363(-8)? (STDERR)                            ^
W202407-10:06:07.363(-8)? (STDERR) RangeError: Maximum call stack size exceeded
=> Exited with code: 8
=> Meteor server restarted

Soweit ich es verstehe, wird etwas zu enthusiastisch wiederhergestellt, der Serverstapel bläst in die Luft und stürzt ab. Leider habe ich keine wirkliche Idee, wo diese beleidigende Funktion ist-ich habe mir den My Deps.Autorun-Anruf (im Moment nur einen) angesehen und es scheint nicht das Problem zu sein. Keiner meiner Code wird mit explizite Rekursion implementiert, und ich habe keinen Grund, zu vermuten, dass große Objekte weitergegeben werden. Natürlich bin ich mir natürlich nicht sicher.

Ich suche wirklich nur Ratschläge, wie man den Code instrumentieren kann, um mir zu zeigen, wo die Dinge außer Kontrolle geraten. Da Meteor viel hinter den Kulissen macht, wäre es wirklich nützlich, wenn mir jemand ein paar Hinweise darauf geben könnte, wo ich nachsehen soll.

Ich komme gerade darauf zurück und bin immer noch ziemlich verloren, wo ich suchen soll. Dies Die vorgeschlagene Aktualisierung auf Node 0.11.x würde mir mehr Informationen geben, aber das scheint nicht mehr Details hinzugefügt zu haben, wenn es abstürzt.

Der Absturz erfolgt nach jeder Seiteninteraktion-das heißt, der Server startet und funktioniert in Ordnung, aber wenn ich den Browser neu lade oder mit der Seite selbst interagiere, boom!

Hier finden Sie den Servercode: hier ist der Servercode:

isAuthorized = () ->
    console.log "checking authorization"
    this.userId == Assets.getText('authorizedUsers')

Meteor.methods(
    isAuthorized : isAuthorized
    filePickerKey : () -> 
        # TODO: properly abstract this, rather than copy/paste...       
        if this.userId == Assets.getText('authorizedUsers')
            Assets.getText('fpKey')
        else
            Meteor.Error 403, 'Error 403: Forbidden')

Infizierende Linie 172 von Future.js lieferte keine weiteren Details:

I2041-15:52:07.363(-8)? Resolve cb threw Maximum call stack size exceeded

Und hier ist die Mühe, in denen ich begegne, während ich versuche, Knoteninspektor zu verwenden. Ich habe in der letzten halben Stunde damit gespielt, also mache ich wahrscheinlich nur einen grundlegenden Fehler, aber: Ich habe den Knoteninspektor über NPM (NPM install -g-Knoteninspektor) installiert.

Dann versuche ich

$ node-inspector &
[1] 3408
$ Node Inspector v0.6.2
  info  - socket.io started
Visit http://127.0.0.1:8080/debug?port=5858 to start debugging.

$ meteor &
[2] 3413
$ [[[[[ ~/Projects/indefinite-ways ]]]]]

=> Meteor server running on: http://localhost:3000/

$ kill -s USR1 3413
Hit SIGUSR1 - starting debugger agent.
debugger listening on port 5858

So weit, ist es gut. Zu diesem Zeitpunkt ist die Client -Seite in meinem Browser nicht geöffnet (dh keine Registerkarte zeigt auf Localhost: 3000). Ich öffne einen Chrom -Registerkarten, der auf Localhost: 5858 zeigt, und sehe die Quelle für meteor.js Ich habe einen Haltepunkt in Zeile 6 von meteor.js festgelegt

var Fiber = require('fibers');

und dann die Registerkarte "Meteor Client" (Localhost: 3000) und den oben genannten Stapelüberlauf wieder auf. Der Debugger hält in Zeile 6 nicht an oder zeigt auf andere Weise an, dass er bemerkt hat. Gleiches gilt, wenn ich in Zeile 3 einen Haltepunkt festlegt.

War es hilfreich?

Lösung 2

Die etwas hilfreichere Antwort kommt von der Inoffizielle Meteor -FAQ:

$ node-inspector &
$ NODE_OPTIONS='--debug-brk' mrt run &

Dies startet den Node-Inspector-Prozess im Hintergrund und startet dann Meteors Knotencontainer, das mit den richtigen Debugging-Flags eingestellt ist. Öffnen Sie die Registerkarte Chrom nach http://127.0.0.1:8080/debug?port=5858 Lassen Sie mich durchlaufen.

Und auch nicht streng Die Antwort auf die Frage, aber die beleidigende Zeile im obigen Code scheint anzurufen Meteor.Error im Servercode. Ich werde immer noch gerne eine Antwort darauf annehmen, die dies identifiziert hätte. Ich vermute, dass Meteor.Error überhaupt nicht ejsonbar ist, und wenn man versucht, es zu analysieren, explodiert der Stapel.

Andere Tipps

Versuchen Knoteninspektor, Es ermöglicht, den CallStack zu inspizieren. Das ist ein Video Präsentation Wie man es benutzt, sieht es visuell aus wie der Chrome -Debugger (es ist dieselbe Basisquelle).

Zeile 173 von Future.js leitet eine Ausnahme zum nächsten Hörer weiter. In Ihrem Fall erscheint der nächste Hörer die Instanz selbst, was zu einer Stapel -Crash -Schleife führt.

Bearbeiten Sie Ihre future.js -Datei (Pfad in OP) und die Konsole.log -Linie direkt darüber ... dann sollten Sie eine detailliertere Erläuterung des Vorgänge sehen. Wenn die Ausgabe von Console.log nicht hilfreich ist, um zu beheben, veröffentlichen Sie hier für weitere Diagnose.

Ich vermute, es hängt mit einem fehlenden Paket zusammen Dieser Thread.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top