環境
Ruby 2.6.5
RailsRails 6.0.3.6
状況
ユーザー登録機能をdeviseで実装したオリジナルアプリを、Herokuにてデプロイ。
アクセスすると、トップページは表示されますが、トップページから「新規登録」や「ログイン」をクリックすると、エラーが出るという状況です。
結論
Heroku上でのマイグレーションがうまくいっていないことが原因でした。
解決までの過程
① heroku logs --tail --app <<アプリケーション名>> でログを確認
ログの最下部にstatus=500とあります。500番台は、サーバーがブラウザからのリクエストの処理に失敗した状態です。
調べてみると、DBに関わる場合が多いとわかり、heroku run rails db:migrateでもう一度マイグレーションを試みます。
② マイグレーション中のログ内にエラーを確認
「No such column: posts.genre」
postsテーブルにgenreというカラムが存在しないことにより、
「all later migrations canceled:」
マイグレーションがキャンセルされた
ということがわかりました。
③ 問題解決のための仮定
postsテーブルを確認すると、genreカラムではなくgenre_idカラムが存在していました。
初めはgenreカラムを作成しましたが、設計を変更し、genre_idカラムに書き換えました。
そのためのファイルが以下です。
このファイルがある状態でHerokuにマイグレーションを行おうとすると、genreカラムの存在が確認できず、エラーが出ると考えました。
④ 仮定の検証
genreカラムをgenre_idカラムに変更したファイルを削除し、再度heroku run rails db:migrateを実行しました。
⑤ 問題の解決
マイグレーションが完了し、アプリも正常に作動しました。
まとめと疑問点
エラーは、ログからエラー内容の確認、原因の特定、修正の流れが大切だと再認識しました。
ただ今回の場合、そもそも「新規登録」や「ログイン」のボタンをクリックしても情報入力ページに行くだけなので、DBはまだ関係ないのではと疑問が残りました。
情報入力後、「登録する」や「ログインする」のボタンをクリックするとエラーになるのなら納得できるのですが・・・
この点も含め、より理解が深まるよう、今後も学習を継続したいと思います。