【Rails】Herokuにデプロイ後、一部のページで500エラー(Internal Server Error)


はじめに

本番環境にて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エラーで悩んでる人結構いると思うので
この記事がお役に立てれば幸いです。