【Rails】 Heroku에 배포 후 일부 페이지에서 500 오류 (Internal Server Error)

2079 단어 경 6Rails

소개



프로덕션 환경에서 500 오류가 발생합니다.
1주일 정도 고민해 드디어 개선했으므로 이 기회에 정리해 두고 싶습니다.

발생한 문제



로컬 환경에서는 문제없이 움직이지만, (PostgreSQL에의 대응 등은 끝나고 있다)
Heroku에 배포하면 일부 페이지를 열 때 500 오류가 나와 "We're sorry, but something went wrong."가 된다.

heroku logs -t 로그를 봐도 500이라고 쓰는 것만으로 무엇이 나쁜지 잘 모르겠다.
2021-05-14T16:33:21.741002+00:00 heroku[router]: at=info method=GET path="/recipes" host=myapp.herokuapp.com request_id=58d9aaaf-b1c3-46ab-a97c-51d54f102341 fwd="14.10.86.33" dyno=web.1 connect=1ms service=23ms status=500 bytes=1827 protocol=https

대처



마이그레이션 실행
DB의 마이그레이션이 잘 되지 않는 경우가 많은 것 같기 때문에, heroku run rails db:migrate (을)를 시도해 보지만, 특히 에러도 나오지 않고 실행할 수 있었다. 하지만 그래도 개선되지 않는다.

설정 등 여기저기 봐도 나쁜 곳은 없을 것 같아・・・

결론



다시 한번 Heroku의 로그를 검토해 보면 왠지 썼다.
FATAL -- :  ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR:  relation "recipes" does not exist
WHERE a.attrelid = '"recipes"'::regclass

조사해 보면 아무래도 「테이블이 없어」라는 의미다.

그래서 heroku run rails c 로 콘솔 기동해 モデル名.column_names 로 컬럼명 확인하면 테이블이 없으면 에러가 나왔다.
원인은 이것이었던 것 같다.db:migrate 에서 잘 못했기 때문에 DB 리셋으로 대처하는 것.
heroku pg:reset DATABASE_URL 명령 실행
WARNING: Destructive action
 ▸    データベース名 will lose all of its data
 ▸    
 ▸    To proceed, type アプリ名 or re-run this command with --confirm

이런 메시지가 나오므로 앱 이름을 입력하여 실행하면 리셋 완료.

다시 heroku run rails db:migrate 실행하고 콘솔에서 테이블을 확인하면 이번에는 제대로 테이블을 만들 수 있습니다.
배포한 앱도 정상적으로 움직이게 되었다.

마지막으로



이번 배운 것은 로그는 매우 중요하다는 것.
무엇이 좋지 않을까 제대로 써있고, 앞으로는 제대로 보도록 하자.

500 오류로 고민하는 사람이 꽤 있다고 생각하기 때문에
이 기사가 도움이 되길 바랍니다.

좋은 웹페이지 즐겨찾기