Raspberry PiにNode.jsをインストールし、Meteor.jsリーダーボードの例を実行しようとしています。バンドルしてPiにコピーしました。MONGO_URLとnpmをインストールしたFiberを設定しました(問題が発生した後)。実行しようとすると:
$ node main.js
Maximum call stack size exceeded
例外が発生します。
/home/pi/bundle/server/server.js:143
}).run();
^
RangeError: Maximum call stack size exceeded
私はでコマンドを実行し、--trace
これを取得しました:
/home/pi/bundle/server/server.js:143
1: GetLineNumber+56(this=0x4e92928d <JS Object>, 0x26693f79 <JSMessageObject>) {
2: ScriptLocationFromPosition+64(this=0x26693f25 <a Script value = 0x4e953839 <Script>>, 4636, 0x4e9080a1 <true>) {
3: ScriptLineFromPosition+60(this=0x26693f25 <a Script value = 0x4e953839 <Script>>, 4636) {
4: ScriptLineCount+40(this=0x26693f25 <a Script value = 0x4e953839 <Script>>) {
4: } -> 151
4: SUB+48(this=151, 1) {
4: } -> 150
4: ADD+52(this=0, 150) {
4: } -> 150
4: SAR+48(this=150, 1) {
4: } -> 75
4: ADD+52(this=75, 1) {
4: } -> 76
4: SUB+48(this=146, 1) {
4: } -> 145
4: SUB+48(this=146, 1) {
4: } -> 145
3: } -> 142
3: SUB+48(this=142, 1) {
3: } -> 141
3: ADD+52(this=4630, 1) {
3: } -> 4631
3: SUB+48(this=4642, 1) {
3: } -> 4641
3: charAt+48(this=0x3735a0cd <Very long string[4703]>, 4641) {
3: } -> 0x37324625 <String[1]: ;>
3: SUB+48(this=4636, 4631) {
3: } -> 5
3: ADD+52(this=142, 0) {
3: } -> 142
3: new SourceLocation+40(this=0x26694b99 <a SourceLocation>, 0x26693f25 <a Script value = 0x4e953839 <Script>>, 4636, 142, 5, 4631, 4642) {
3: } -> 0x4e908091 <undefined>
2: } -> 0x26694b99 <a SourceLocation>
2: ADD+52(this=142, 1) {
2: } -> 143
1: } -> 143
/home/pi/bundle/server/server.js:143
1: GetSourceLine+56(this=0x4e92928d <JS Object>, 0x26693f79 <JSMessageObject>) {
2: ScriptLocationFromPosition+64(this=0x26693f25 <a Script value = 0x4e953839 <Script>>, 4636, 0x4e9080a1 <true>) {
3: ScriptLineFromPosition+60(this=0x26693f25 <a Script value = 0x4e953839 <Script>>, 4636) {
4: ScriptLineCount+40(this=0x26693f25 <a Script value = 0x4e953839 <Script>>) {
4: } -> 151
3: } -> 142
3: charAt+48(this=0x3735a0cd <Very long string[4703]>, 4641) {
3: } -> 0x37324625 <String[1]: ;>
3: new SourceLocation+40(this=0x26694ce5 <a SourceLocation>, 0x26693f25 <a Script value = 0x4e953839 <Script>>, 4636, 142, 5, 4631, 4642) {
3: } -> 0x4e908091 <undefined>
2: } -> 0x26694ce5 <a SourceLocation>
2: SourceLocationRestrict+60(this=0x26694ce5 <a SourceLocation>, 0x4e908091 <undefined>, 0x4e908091 <undefined>) {
3: SUB+48(this=78, 10) {
3: } -> 68
3: SUB+48(this=4642, 4631) {
3: } -> 11
2: } -> 0x4e908091 <undefined>
2: SourceLocationSourceText+40(this=0x26694ce5 <a SourceLocation>) {
3: substring+64(this=0x3735a0cd <Very long string[4703]>, 4631, 4642) {
3: } -> 0x26694d29 <String[11]: }).run();>
2: } -> 0x26694d29 <String[11]: }).run();>
1: } -> 0x26694d29 <String[11]: }).run();>
}).run();
1: GetPositionInLine+56(this=0x4e92928d <JS Object>, 0x26693f79 <JSMessageObject>) {
2: ScriptLocationFromPosition+64(this=0x26693f25 <a Script value = 0x4e953839 <Script>>, 4636, 0x4e9080b1 <false>) {
3: ScriptLineFromPosition+60(this=0x26693f25 <a Script value = 0x4e953839 <Script>>, 4636) {
4: ScriptLineCount+40(this=0x26693f25 <a Script value = 0x4e953839 <Script>>) {
4: } -> 151
3: } -> 142
3: charAt+48(this=0x3735a0cd <Very long string[4703]>, 4641) {
3: } -> 0x37324625 <String[1]: ;>
3: new SourceLocation+40(this=0x26694d71 <a SourceLocation>, 0x26693f25 <a Script value = 0x4e953839 <Script>>, 4636, 142, 5, 4631, 4642) {
3: } -> 0x4e908091 <undefined>
2: } -> 0x26694d71 <a SourceLocation>
2: SourceLocationRestrict+60(this=0x26694d71 <a SourceLocation>, 0x4e908091 <undefined>, 0x4e908091 <undefined>) {
2: } -> 0x4e908091 <undefined>
2: SUB+48(this=4636, 4631) {
2: } -> 5
1: } -> 5
1: GetPositionInLine+56(this=0x4e92928d <JS Object>, 0x26693f79 <JSMessageObject>) {
2: ScriptLocationFromPosition+64(this=0x26693f25 <a Script value = 0x4e953839 <Script>>, 4636, 0x4e9080b1 <false>) {
3: ScriptLineFromPosition+60(this=0x26693f25 <a Script value = 0x4e953839 <Script>>, 4636) {
4: ScriptLineCount+40(this=0x26693f25 <a Script value = 0x4e953839 <Script>>) {
4: } -> 151
3: } -> 142
3: charAt+48(this=0x3735a0cd <Very long string[4703]>, 4641) {
3: } -> 0x37324625 <String[1]: ;>
3: new SourceLocation+40(this=0x26694e7d <a SourceLocation>, 0x26693f25 <a Script value = 0x4e953839 <Script>>, 4636, 142, 5, 4631, 4642) {
3: } -> 0x4e908091 <undefined>
2: } -> 0x26694e7d <a SourceLocation>
2: SourceLocationRestrict+60(this=0x26694e7d <a SourceLocation>, 0x4e908091 <undefined>, 0x4e908091 <undefined>) {
2: } -> 0x4e908091 <undefined>
1: } -> 5
^
1: ToString+40(this=0x4e92928d <JS Object>, 0x4e908091 <undefined>) {
1: } -> 0x373080bd <String[9]: undefined>
1: getter+40(this=0x26693e85 <a RangeError>) {
2: +40(this=0x4e908091 <undefined>, 0x4e96824d <a RangeError>) {
3: FormatMessage+72(this=0x4e908091 <undefined>, 0x26694ed5 <JSMessageObject>) {
4: ADD+52(this=0, 1) {
4: } -> 1
4: ADD+52(this=1, 0) {
4: } -> 1
4: ADD+52(this=0, 2) {
4: } -> 2
4: FormatString+64(this=0x4e908091 <undefined>, 0x2669611d <JS array[1]>, 0x26694ed5 <JSMessageObject>) {
5: ADD+52(this=0x373082e5 <String[0]: >, 0x59c1f9cd <String[32]: Maximum call stack size exceeded>) {
5: } -> 0x59c1f9cd <String[32]: Maximum call stack size exceeded>
5: ADD+52(this=1, 0) {
5: } -> 1
4: } -> 0x59c1f9cd <String[32]: Maximum call stack size exceeded>
3: } -> 0x59c1f9cd <String[32]: Maximum call stack size exceeded>
2: } -> 0x59c1f9cd <String[32]: Maximum call stack size exceeded>
1: } -> 0x59c1f9cd <String[32]: Maximum call stack size exceeded>
RangeError: 1: getter+40(this=0x26693e85 <a RangeError>) {
1: } -> 0x59c1f9cd <String[32]: Maximum call stack size exceeded>
Maximum call stack size exceeded
この問題を追跡できる最後の場所は、ファイル内です。
app/packages/mongo-livedata/mongo_driver.js
10行目あたり:
var MongoDB = __meteor_bootstrap__.require('mongodb');
最新のnpm(1.1.50)をインストールし、npmにmongodbをグローバルにインストールしました。私はmongolab.comでホストされているmongodbを指しています。いくつかのレコードを接続して挿入するための簡単なテストを作成しました。Meteorに使用しようとしているのとまったく同じURLを使用し、期待どおりに機能します。
var connect = require('mongodb').connect;
var url = 'mongodb://<user>:<password>@<cloud_id>.mongolab.com:<port>/<database>';
connect(url, function(err, db) {
db.collection('test', function(err, collection) {
// Insert 3 records
for(var i = 0; i < 3; i++) {
collection.insert({'a':i});
}
});
});
トレースメッセージはよくわかりませんが、FormatString
呼び出しが例外のトリガーになっているようです。助言がありますか?
アップデート:
私はこれをもう少しデバッグし、ここにとして示されている特定のmongodbモジュールのロードに問題を切り分けましたfilename
。しばらくステップスルーすると、モジュールは再帰的にそれ自体を含んでいるように見えます。
break in module.js:311
Watchers:
0: path = ...
1: parent = ...
2: filename = "/home/pi/bundle/server/node_modules/mongodb/lib/mongodb/connection/repl_set.js"
308 var hadException = true;
309
310 try {
311 module.load(filename);
312 hadException = false;
313 } finally {
314 if (hadException) {
315 delete Module._cache[filename];
316 }
317 }
debug>
< RangeError: Maximum call stack size exceeded
program terminated