1
개발 모드에서 실행중인 레일 서버에서 method_missing을 호출하면 StackOverflowError
으로 종료됩니다. JRuby 환경의 Rails5입니다. 여기서는 멀티 스레딩을 사용하지 않습니다.레일 : method_missing이 StackOverflowError로 연결됩니다.
- 에 StackOverflow가 발생하는 클래스는 우리 자신에 의해 작성되었습니다 다음과 같이
동작
요약 될 수있다.def method_missing
을 구현하고 거기에서 올리면 올바른 동작이 발생합니다 (예 :fail 'oh noes.'
). 예상되는 오류가 인쇄됩니다. method_missing
에서 super (* args)를 호출하면StackOverflowError
이 다시 발생합니다.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)를 디버그 셸
,
- 테스트 또는 프로덕션 환경에서 서버를 시작한 경우 아무 것도 발생하지 않습니다.
backtrace
또는
info stack
통해 트레이스를 얻는 시도가 StackOverflow에 발생할 것이다.
레일에서 일부 코드가 this commit에서 제거 된 것을 확인했습니다. 사실, 삭제 된 코드를 다시 넣어 (테스트 목적으로 만) 문제를 해결합니다.
이것이 레일 버그라고 생각하십니까?
이것은 JRuby 9.1.5.0의 버그로, JRuby 9.1.6.0에서 수정 된 것 같습니다. – Kalsan