문제

나는 지금이 충돌을보고 있는데 노드 파이버 인프라에 충분히 익숙하지 않아 오류 해석을 시작하거나 코드를 계측해야 할 곳을 알 수 있습니다 ...

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 행에서 중단 점을 설정하면 마찬가지입니다.

도움이 되었습니까?

해결책 2

약간 더 유용한 대답은 비공식 유성 FAQ:

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

이것은 백그라운드에서 Node-Inspector 프로세스를 시작한 다음 오른쪽 디버깅 플래그 세트로 Meteor의 노드 컨테이너를 듣습니다. 크롬 탭을 열었습니다 http://127.0.0.1:8080/debug?port=5858 내가 밟아 보자.

또한 엄격하게 질문에 대한 답변이지만 위의 코드의 불쾌한 줄은 Meteor.Error 서버 코드에서. 나는 여전히 그것을 확인한 것에 대한 답을 기꺼이 받아 들일 것입니다. 나는 Meteor.error가 전혀 ejsonable이 아니라고 추측하고 있으며, 그것을 구문 분석하려고 시도하면 스택이 폭발합니다.

다른 팁

노력하다 노드 인스 스펙터, 콜 스택을 검사 할 수 있습니다. 이것은 비디오 프레젠테이션 사용 방법에 대해 시각적으로 크롬 디버거처럼 보입니다 (동일한 기본 소스).

Future.js의 173 행 다음 청취자에게 예외를 전달합니다. 귀하의 경우에 다음 리스너가 인스턴스 자체 인 경우 스택 충돌 루프가 나타납니다.

미래를 편집하고 JS 파일 (OP에서 참조 된 경로)과 Console.log 라인을 바로 위에 있으십시오. 그러면 무슨 일이 일어나고 있는지에 대한 자세한 설명이 보일 것입니다. Console.log 출력을 해결하는 데 도움이되지 않으면 추가 진단을 위해 여기에 게시하십시오.

내 생각에 그것은 누락 된 패키지와 관련이 있다는 것입니다. 이 스레드.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top