Ben*_*Ben 6 v8 node.js meteor node-fibers
我现在看到这个崩溃,并且对节点光纤基础设施不够熟悉,不知道从哪里开始解释错误或检测代码......
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
Run Code Online (Sandbox Code Playgroud)
据我所知,有些东西反复出现,服务器堆栈爆炸,它崩溃了.不幸的是,我不知道这个有问题的功能在哪里 - 我看了我的Deps.autorun电话(目前只有一个),这似乎不是麻烦.我的代码都没有用显式递归实现,我没有任何理由怀疑传递大对象.显然,我当然不太确定.
我真的只是在寻找有关如何检测代码的建议,以向我展示事情失控的地方.由于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')
Run Code Online (Sandbox Code Playgroud)
取消注释future.js的第172行没有提供更多细节:
I2041-15:52:07.363(-8)? Resolve cb threw Maximum call stack size exceeded
Run Code Online (Sandbox Code Playgroud)
而且,这是我在尝试使用node-inspector时遇到的麻烦.我过去半小时一直在玩这个,所以我可能只是犯了一些基本错误,但是:我通过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
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.此时,客户端未在我的浏览器中打开(即没有指向localhost:3000的选项卡).我打开一个指向localhost:5858的Chrome标签页,看看meteor.js的来源我在meteor.js的第6行设置了一个断点
var Fiber = require('fibers');
Run Code Online (Sandbox Code Playgroud)
然后打开meteor客户端选项卡(localhost:3000),再次弹出上述堆栈溢出.调试器不会在第6行停止,或以任何其他方式表示它已注意到.如果我在第3行设置断点,情况也是如此.
稍微有用的答案来自非官方的 Meteor FAQ:
$ node-inspector &
$ NODE_OPTIONS='--debug-brk' mrt run &
Run Code Online (Sandbox Code Playgroud)
这将在后台启动节点检查器进程,然后启动流星的节点容器,并设置正确的调试标志进行侦听。打开 Chrome 选项卡让http://127.0.0.1:8080/debug?port=5858我逐步完成。
另外,严格来说这不是问题的答案,但上面代码中的违规行似乎是Meteor.Error在服务器代码中调用的。我仍然很乐意接受能够确定这一点的答案。我猜测 Meteor.Error 根本不是 EJSONable,并且在尝试解析它时,堆栈会爆炸。
| 归档时间: |
|
| 查看次数: |
1305 次 |
| 最近记录: |