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