Herokuエラーのまとめ
ローカル環境では問題がなかったのに、
Herokuにデプロイ後にエラーになってしまった時の対応をまとめました。
1.実例)エラー画面
エラー文章は
We're sorry, but something went wrong.
If you are the application owner check the logs for more information.
2.とにかくエラーログを見ろ!
基本的に、エラー画面が出た時の対応はこちらです。
1.エラー画面が表示されたら作業ストップ
2.そのままターミナルへ移動
3.% heroku logs
を実行
4.ログの下の行を見ていくと、エラーのHTTPステータスがある
5.HTTPのステータス番号をチェックする
過去に遭遇した私のエラーでのログはこちらです。
2021-07-11T13:41:37.358040+00:00 app[web.1]: [3026cb21-3b24-4b7d-bfe0-61607329c87e] app/controllers/users_controller.rb:4:in `show'
2021-07-11T13:41:37.364921+00:00 heroku[router]: at=info method=GET path="/users/15" host=zabuton-dayori.herokuapp.com request_id=3026cb21-3b24-4b7d-bfe0-61607329c87e fwd="133.106.152.132" dyno=web.1 connect=1ms service=82ms status=500 bytes=1827 protocol=https
状況は、ログインユーザーのマイページ(showアクション)へ遷移したいのに、
遷移できずにエラーになった。
確かにログでは
app/controllers/users_controller.rb:4:in show
があります!!
さらに下の行ではstatus=500
の文字が!
※HTMLステータスの番号については、こちらのサイトがおすすめです。
3.HTTPステータス番号で理由を探る!
私が遭遇した500番のエラーは何らかのサーバ内で起きたエラー。
また、ログを見ていると
ActiveRecord::StatementInvalid (Mysql2::Error: Table 'heroku_5c5fbb7e936a5dc.memos' doesn't exist):
Mysql2::Error
とありました。
サーバーに問題があるのは間違いなさそうです。
memos
というのは、
このアプリのマイページで、メモ機能をつけるために私が作成したテーブルです。
doesn't exist
ということは、
memoのDBが存在していない。
はて??
ここで気づきました。
herokuでmigrateしていない!
つまり
ローカル環境とDBの状態が違うままだ!
そこでターミナルでherokuへのmigrateを実行します。
heroku run rails db:migrate
その後、確認をするとローカル環境と同じように表示されました!
Herokuのエラーが出ると、なかなか特定するのに大変そうと思われますが、
こうやってログを確認していけば、ローカル環境の時と同様にエラー原因を見つけることができます。