現在、このクラッシュが発生していますが、ノード ファイバー インフラストラクチャに精通していないため、エラーの解釈やコードのインストルメント化をどこから開始すればよいかわかりません...
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
私が理解しているように、何かが少し熱狂的に繰り返され、サーバー スタックが爆発し、クラッシュします。残念ながら、この問題のある関数がどこにあるかはわかりません.Deps.autorun呼び出し(現時点では1つだけ)を見ましたが、問題はないようです。私のコードは明示的な再帰を使用して実装されておらず、大きなオブジェクトが渡されていると疑う理由はありません。もちろん、私は本当に確信が持てません。
コードをインストルメント化して、どこが手に負えなくなっているかを示す方法についてのアドバイスを本当に探しています。Meteor は舞台裏で多くのことを行っているため、どこを見ればよいか、誰かが私にいくつかの指針を与えることができれば、非常に役に立ちます。
これに戻ってきたばかりですが、どこを見ればいいのかまだかなり迷っています。これは、ノード 0.11.x に更新すると詳細情報が得られることを示唆していますが、それを行っても、クラッシュしたときに詳細が追加されていないようです。
クラッシュは、ページのやり取りの後に発生します。つまり、サーバーが起動して正常に機能していますが、ブラウザーでリロードしたり、ページ自体を操作したりすると、BOOM!
一般的な要求により、サーバー コードは次のとおりです。
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')
future.js の 172 行目のコメントを外しても詳細はわかりませんでした:
I2041-15:52:07.363(-8)? Resolve cb threw Maximum call stack size exceeded
そして、node-inspector を使おうとしているときに遭遇した問題があります。私は過去30分間これをいじっていたので、根本的なエラーを起こしている可能性がありますが、npm経由でnode-inspectorをインストールしました(npm install -g node-inspector)。
それから、私は試します
$ 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
ここまでは順調ですね。この時点で、クライアント側はブラウザで開かれていません (つまり、localhost:3000 を指すタブはありません)。localhost:5858 を指す Chrome タブを開くと、meteor.js のソースが表示されます。meteor.js の 6 行目にブレークポイントを設定します。
var Fiber = require('fibers');
その後、Meteor クライアント タブ (localhost:3000) を開くと、前述のスタック オーバーフローが再び表示されます。デバッガーは 6 行目で停止しません。または、他の方法で、デバッガーが気付いたことを示します。3 行目にブレークポイントを設定した場合も同様です。