質問

私は今このクラッシュを見ています、そして、ノードファイバーインフラストラクチャに十分に精通していません。

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

そして、ここにノードインストペクターを使用しようとしているときに遭遇したトラブルがあります。私は過去30分間これで遊んでいるので、基本的なエラーをしているだけかもしれませんが、NPM(NPMインストール-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行目でブレークポイントを設定した場合も同じです。

役に立ちましたか?

解決 2

やや役立つ答えはから来ています 非公式の流星FAQ:

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

これにより、バックグラウンドでノードインスペクタープロセスが開始され、右のデバッグフラグセットでMeteorのノードコンテナがリスニングされます。 Chromeタブを開きます http://127.0.0.1:8080/debug?port=5858 ステップスルーしましょう。

また、そうではありません 厳密に 質問への答えですが、上記のコードの問題のある行は呼び出しているようです Meteor.Error サーバーコードで。私はまだそれを特定したであろうこれに対する答えを喜んで受け入れます。 meteor.errorはまったくejsonableではないと推測しており、それを解析しようとすると、スタックは爆発します。

他のヒント

試す Node-Inspector, 、CallStackを検査することができます。これは ビデオプレゼンテーション それを使用する方法については、視覚的にはChromeデバッガーのように見えます(同じベースソースです)。

Future.jsの173行 次のリスナーに例外を転送します。あなたの場合、次のリスナーはインスタンス自体であり、スタッククラッシュループになります。

Future.jsファイル(OPで参照されているパス)を編集し、そのすぐ上のコンソールラインを除外してください。 Console.log出力が解決に役立たない場合は、さらなる診断のためにここに投稿してください。

私の推測では、それは不足しているパッケージに関連しています、 このスレッド.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top