今回の記事は、自分でWebアプリケーションを作成していて、本番環境でエラーが発生しました。
その解決、解決までの仮定を備忘録として書かせていただきます。
エラー発生時の状況
開発言語:Ruby
DB:My SQL
サーバー:Heroku
作成したWebアプリケーションの入力フォームに必要事項を入力し、内容を保存する為に画面上の「設定」ボタンをクリック。
画面が遷移したら、下記のエラー表示画面が発生。
ターミナルからログを確認すると、
ActiveModel::UnknownAttributeError (unknown attribute 'comment' for Training.):
→Trainingモデルには、commentカラムはないよ
解決までの過程
原因の仮説
本番環境でのデータベースにcommentカラムがないため、保存ができず、エラーが発生してしまったのではないか?
アプリを作成している段階で、マイグレーションファイルのカラム名を変更をしているため、それが反映されていなかったと考えられる。
対応の仮説
最新のローカル環境でのデータベースの内容を本番環境でも反映させることにより、エラーが解決するのではないかと考えました。
実施内容
①Heroku上のデータベースの内容確認。
これは、以前の記事にも書いたの割愛させていただきます。
②ローカルのデータベースの内容をHerokuのデータベースにも反映させる。
〜手順〜
1:heroku上のマイグレーションファイルの状態を確認する。
Heroku run rails db:migrate:status
2:修正したいheroku上のマイグレーションファイルを”down”状態にする。
Heroku run rails db:migrate:rollback STEP=2
*今回は、2つマイグレーションファイルを修正したかったので、2つ前までのマイグレーションファイルをdown状態にするために"STEP=2"とさせていただきました。
3:マイグレーションファイルを修正し、Git Hubデスクトップでリモート側へプッシュする。 *今回の場合、ローカル環境では、修正済みであり、本番環境への反映だけがされていなかったので、割愛させていただきます。
4:herokuでマイグレーションを実行する。
Heroku run rails db:migrate:status
これにより、本番環境のマイグレーションファイルも更新されます。
5:マイグレーションファイルが"up"状態となっていることを確認する。 1:同様に下記のコマンドで確認する。
Heroku run rails db:migrate:status
6:Herokuをリセットする。
Heroku reset
このコマンドを実行することにより、Heroku上のデータが一度リセットされ、マイグレーションファイルも反映され、無事エラー解決することができました!
まとめ
・ログからエラー内容を確認する。
・Heroku上のデータベースの内容確認。
・修正したいheroku上のマイグレーションファイルを”down”状態にする。
・マイグレーションファイルを修正し、Git Hubデスクトップでリモート側へプッシュする。
・herokuでマイグレーションを実行する。
・Herokuをリセットする。