我现在看到这次崩溃了,对节点光纤基础架构还不够熟悉,以了解在哪里可以解释错误或仪器代码...

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呼叫(目前只有一个),这似乎并不是麻烦。我的代码没有明确的递归实施,我没有任何理由怀疑大型对象正在传递。显然,我当然不确定。

我真的只是在寻找有关如何启动代码的建议,以向我展示事情到底到达的位置。由于流星在幕后做很多事情,因此,如果有人可以给我一些关于在哪里看的指针,那将非常有用。

只是回到这一点,仍然对要寻找的地方仍然迷失了方向。 这个 建议更新到节点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')

Unvure.js的Uncommenting第172行没有提供更多详细信息:

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

而且,这是我在尝试使用节点检查员时遇到的麻烦。在过去的半小时中,我一直在玩这个游戏,所以我可能只是犯了一些基本错误,但是:我通过NPM(NPM Install -G Node-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 Tab,并查看Meteor.js的来源,我在Meteor.js的第6行上设置了一个断点

var Fiber = require('fibers');

然后打开“流星客户端”选项卡(Localhost:3000),并再次弹出上述堆栈溢出。调试器不会在第6行上停止,或以任何其他方式表明它已经注意到了。如果我在第3行中设置断点,也是如此。

有帮助吗?

解决方案 2

稍微有用的答案来自 非正式流星常见问题解答:

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

这在背景中启动节点检查员进程,然后以正确的调试标志设置启动流星节点容器侦听。打开Chrome选项卡 http://127.0.0.1:8080/debug?port=5858 让我走过。

另外,不是 严格 问题的答案,但是上面的代码中的有问题线似乎在调用 Meteor.Error 在服务器代码中。我仍然很乐意接受这个可以确定的答案。我猜测流星根本根本不可能,并且在试图解析它时,堆栈会爆炸。

其他提示

尝试 节点检查员, ,它允许检查呼叫站。这是一个 视频演示 关于如何使用它,从视觉上看看起来像Chrome调试器(它是同一基础源)。

Future.js的第173行 向下一个听众转发一个例外。在您的情况下,下一个侦听器是实例本身,导致堆栈崩溃循环。

编辑您的Future.js文件(OP中引用的路径),并在其上方的Console.log线上取消输入...然后,您应该看到对正在发生的事情的更详细说明。如果Console.log输出无助于解决,请在此处发布以获取进一步的诊断。

我的猜测是与丢失的软件包有关 这个线程.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top