나는 지금이 충돌을보고 있는데 노드 파이버 인프라에 충분히 익숙하지 않아 오류 해석을 시작하거나 코드를 계측해야 할 곳을 알 수 있습니다 ...
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 전화 (현재 하나만)를 보았고 문제가되지 않는 것 같습니다. 내 코드 중 어느 것도 명시 적 재귀로 구현되지 않았으며, 큰 물체가 전달되고 있다고 의심 할 이유가 없습니다. 분명히, 나는 물론 확실하지 않습니다.
나는 정말로 코드를 악기로 만드는 방법에 대한 조언을 찾고 있습니다. Meteor는 무대 뒤에서 많은 일을하고 있기 때문에 누군가 나에게 어디서 볼 수 있는지에 대한 몇 가지 포인터를 줄 수 있다면 정말 유용 할 것입니다.
그냥 이것으로 돌아오고, 어디를보고 있는지에 대해서는 여전히 꽤 길을 잃었습니다. 이것 Node 0.11.x에 대한 업데이트를 제안하면 더 많은 정보가 제공되지만 충돌시 더 자세한 정보는 추가되지 않은 것 같습니다.
충돌은 페이지 상호 작용 후에 발생합니다. 즉, 서버가 시작되어 작동합니다. 그러나 브라우저에서 다시로드하거나 페이지 자체와 상호 작용하면 붐!
대중적인 수요에 의해 서버 코드는 다음과 같습니다.
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')
Uncommenting Line 172 of Future.js는 자세한 내용을 제공하지 않았습니다.
I2041-15:52:07.363(-8)? Resolve cb threw Maximum call stack size exceeded
그리고 Node-Inspector를 사용하려고 시도하는 동안 문제가 발생합니다. 나는 지난 30 분 동안 이것을 가지고 놀았으므로 근본적인 오류가 발생했을 가능성이 있지만 NPM (NPM Install -G Node-Inspector)을 통해 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을 가리키는 크롬 탭을 열고 Meteor.js의 소스를 참조하십시오. JS의 6 행에 중단 점을 설정했습니다.
var Fiber = require('fibers');
그런 다음 Meteor 클라이언트 탭 (LocalHost : 3000)을 열면 앞서 언급 한 스택 오버플로가 다시 나타납니다. 디버거는 6 행에서 중단되지 않거나 다른 방법으로는 눈에 띄는 것을 나타냅니다. 3 행에서 중단 점을 설정하면 마찬가지입니다.