Sto vedendo questo incidente ora e non ho abbastanza familiarità con l'infrastruttura in fibra del nodo per sapere da dove iniziare a interpretare l'errore o strumentare il codice ...
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
A quanto ho capito, qualcosa è ricorrente un po 'troppo con entusiasmo, lo stack del server esplode e si blocca. Sfortunatamente, non ho una vera idea di dove sia questa funzione offensiva-ho guardato la chiamata my depl.autorun (solo una al momento) e non sembra essere il problema. Nessuno del mio codice è implementato con una ricorsione esplicita e non ho alcun motivo per sospettare che gli oggetti di grandi dimensioni vengano trasmessi. Ovviamente, non ne sono davvero sicuro, ovviamente.
Sto davvero solo cercando consigli su come strumentare il codice per mostrarmi dove le cose stanno sfuggendo di mano. Dal momento che Meteor sta facendo molto dietro le quinte, sarebbe davvero utile se qualcuno potesse darmi alcuni suggerimenti su dove cercare.
Sto solo tornando a questo e sono ancora abbastanza perso su dove cercare. questo L'aggiornamento suggerito al nodo 0.11.x mi darebbe maggiori informazioni, ma farlo non sembra aver aggiunto più dettagli quando si blocca.
L'arresto si avvicina dopo qualsiasi interazione di pagina, ovvero il server si avvia e funziona OK, ma se ricarico nel browser o interagisco con la pagina stessa, boom!
Per domanda popolare, ecco il codice del server:
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')
La riga di non emomobile 172 di Future.js non ha fornito maggiori dettagli:
I2041-15:52:07.363(-8)? Resolve cb threw Maximum call stack size exceeded
Ed ecco il problema in cui mi imbatto mentre cerco di usare il nodo-ispettore. Ho giocato con questo nelle ultime mezz'ora, quindi probabilmente sto solo facendo qualche errore fondamentale, ma ho installato il nodo-ispettore tramite NPM (NPM Installa -G Node-Inspector).
Quindi, ci provo
$ 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
Fin qui tutto bene. A questo punto, il lato client non è aperto nel mio browser (cioè nessuna scheda che punta a LocalHost: 3000). Apro una scheda Chrome che punta a LocalHost: 5858 e vedo la fonte di Meteor.js I Imposta un punto di interruzione sulla riga 6 di Meteor.js
var Fiber = require('fibers');
e quindi aprire la scheda client meteor (localhost: 3000) e il suddetto overflow dello stack si presenta di nuovo. Il debugger non si ferma sulla riga 6 o in nessun altro modo indica che lo ha notato. Lo stesso è vero se imposto un punto di interruzione alla riga 3.