Could9에서 Heroku에 배포했을 때 발생한 오류 'App crashed'의 원인 조사에 대해

소개


  • Rails 튜토리얼 제 4 판의 제 2 장의 개발중에 에러 발생.
  • 에러 조사 방법의 비망록으로서 투고.

  • 개발 환경


  • MacOS Catalina 10.15.7
  • Safari 13.1.3
  • AWS Cloud9
  • Rails 5.1.6
  • Ruby 2.6.3
  • Heroku 7.47.6

  • 사건



    Heroku에서 ApplicationError가 발생.


    조사 방법과 원인



    1. 「heroku logs --tail」에서 Heroku의 로그를 확인

    에러 코드 「H10」의 「App crashed」가 출력된다.
    heroku[router]: at=error code=H10 desc="App crashed"
    

    Heroku에서 출력되는 에러 코드와 그 내용은 아래를 참조.
    htps : // 소도 쿠멘들 네 t / 헤로 쿠 / 토피 c / 8321 / 헤로 쿠 에로 r (2021/2/13)

    덧붙여서 Heroku는 표준으로 최신 1500행의 로그를 1주간 보관하고 있는 것 같다.
    Heroku의 로그 내용을 보는 방법과 출력 방법에 대해서는 아래를 참조하십시오.
    htps : //에서 v 선 r. 헤로쿠. 코 m / 자 / 아 rc c ぇ s / ㎉ 긴 g (2021/2/13)

    2. 「heroku run rails console」에서 로그 확인
    이 명령으로 Heroku에 배포 한 응용 프로그램에 대해 Rails Console을 실행할 수 있습니다. Rails 튜토리얼의 경우라면 Cloud9 콘솔에서 더 자세한 오류 내용을 확인할 수 있습니다.
    htps : //에서 v 선 r. 헤로쿠. 코 m / 그럼 / 아 rc c ぇ s / 껄껄 g s r d ぃ th 라 ls5 (2021/2/13)

    커맨드 실행 결과로서 이하의 로그가 출력된다.
    정의되지 않은 메소드 "protect_from_forger"가 "/app/app/controllers/application_controller.rb"의 "2 행"에 있다는 취지의 에러. 친절하게 「혹시 'protect_from_forgery'라고 말하고 싶었어?」라고까지 기재되어 있다.
    /app/app/controllers/application_controller.rb:2:in `<class:ApplicationController>': undefined method `protect_from_forger' for ApplicationController:Class (NoMethodError)
    Did you mean?  protect_from_forgery
    

    즉 원인은 메소드 명칭의 기재 실수였다. (단순 실수에도 정도가 있다...)
    콘솔 상의 커맨드를 지우려고 했을 때에, 실수로 소스 코드에 커서 맞추고 있었다고 생각된다. (통신 환경이 나쁜 장소에서 작업하고 있었기 때문에, Cloud9의 동작이 무겁고 커서 위치의 반영이 늦어졌다?)

    해결책



    해당 부분의 메소드 명칭을 수정. 문제없이 작동.

    요약



    Cloud9상에서 디버그한 후에 해당 버그를 만들었기 때문에, Heroku상에서 발생한 버그로부터 조사하는 형태가 되었다. 버그의 원인 자체는 매우 간단하지만 Heroku에서 발생한 오류 메시지에서 조사하는 방법을 이해하는 좋은 기회가되었습니다.
    또, 평상시는 Java, C# 라고 하는 컴파일러형 언어를 사용하는 것이 많기 때문에, 철자 미스는 컴파일시에 에러가 되고 있었지만, Ruby 와 같은 인터프리터형 언어에서는 이러한 간단한 철자 미스로 시작되는 구문 에러에도 주의 하고 싶다. (IDE에 의한 검출 표현도 알아야 한다. Cloud9에서는 미리 정의된 함수는 색이 변화하고 있었다.)
    아무리 간단한 원인이었다고 해도, 사건으로부터는 간단하게 원인 특정할 수 없는 것이 어플의 어려움이면서 재밌다고 다시 느꼈다(물론 최종적으로 제대로 해결해 처음으로 재미있다).

    좋은 웹페이지 즐겨찾기