2016-12-28 5 views
1

개발 모드에서 실행중인 레일 서버에서 method_missing을 호출하면 StackOverflowError으로 종료됩니다. JRuby 환경의 Rails5입니다. 여기서는 멀티 스레딩을 사용하지 않습니다.레일 : method_missing이 StackOverflowError로 연결됩니다.

  1. 에 StackOverflow가 발생하는 클래스는 우리 자신에 의해 작성되었습니다 다음과 같이

    동작

    요약 될 수있다. def method_missing을 구현하고 거기에서 올리면 올바른 동작이 발생합니다 (예 : fail 'oh noes.'). 예상되는 오류가 인쇄됩니다.
  2. method_missing에서 super (* args)를 호출하면 StackOverflowError이 다시 발생합니다.
  3. debugger 바로 super 위의 작품을 호출하고 next를 입력하면 다음과 같은 호출이라는 것을 알 수 :
    • gems/actionpack-5.0.1.rc2/lib/action_controller/metal/rescue.rb:22
      • request.env['action_dispatch.show_detailed_exceptions'] ||= show_detailed_exceptions?
    • gems/actionpack-5.0.1.rc2/lib/action_controller/metal/rescue.rb:23
      • rescue_with_handler(exception) || raise
    • 는 [StackOverflow에 (포인트 3)를 디버그 셸
  4. , backtrace 또는 info stack 통해 트레이스를 얻는 시도가 StackOverflow에 발생할 것이다.
  5. 테스트 또는 프로덕션 환경에서 서버를 시작한 경우 아무 것도 발생하지 않습니다.

레일에서 일부 코드가 this commit에서 제거 된 것을 확인했습니다. 사실, 삭제 된 코드를 다시 넣어 (테스트 목적으로 만) 문제를 해결합니다.

이것이 레일 버그라고 생각하십니까?

답변