4
5

More than 3 years have passed since last update.

【Rails】Heroku上でのActiveModel::UnknownAttributeError解決方法

Last updated at Posted at 2021-02-16

概要・エラー文

本番環境(Heroku)でデータを新規保存しようとすると、「We're sorry,but something went wrong.」と表示され、保存に失敗する。
Image from Gyazo

解決までの道筋

1.ローカル環境で新規保存できるか確認

念のため、ローカル環境で新規保存できるか確認します。
結果、ローカル環境では成功し、本番環境(heroku)でのみ上記のようなエラーが発生します。

2.本番環境のログを表示し、エラーログを確認

本番環境のログを表示し、エラー詳細について調べます。本番環境のログを表示するために、ターミナルで以下のコマンドを入力します。
heroku logs --tail --app アプリ名

結果、ログの中にエラーログらしき文を確認しました。
Completed 500 Internal Server Error in 14ms (ActiveRecord: 7.8ms | Allocations: 921)
ActiveModel::UnknownAttributeError (unknown attribute 'explanation' for Recipe.):

3.エラー文について検索

  • Completed 500 Internal Server Error in 14ms (ActiveRecord: 7.8ms | Allocations: 921)

500 Internal Server Error = サーバーエラーレスポンス
サーバー側で処理方法がわからない事態が発生したことを示すようです。
引用: https://developer.mozilla.org/ja/docs/Web/HTTP/Status

  • ActiveModel::UnknownAttributeError (unknown attribute 'explanation' for Recipe.):

recipeテーブルにexplanationカラムがないことで発生するエラーのようです。
引用: https://teratail.com/questions/92273?link=qa_related_pc

4.recipeテーブルにexplanationカラムがないことを確認

念のため、ローカル環境でも確認しましたが、recipeテーブルにexplanationカラムを確認しました。
次に、本番環境で確認します。本番環境でのは、以下の手順で確認します。

  • ターミナルでrails consoleを起動
    heroku run rails console

  • DBとの接続情報を表示
    irb(main):014:0> ActiveRecord::Base.connection_config

  • 本番環境での全テーブル名を確認
    irb(main):005:0> ActiveRecord::Base.connection.tables

  • 本番環境の対象テーブルに対象カラムがあるかを確認
    Recipe.inspect
    Recipeテーブルにexplanationカラムが無いことを確認

引用: https://teratail.com/questions/92273?link=qa_related_pc

5.本番環境のデータベースをリセット

ここまでで本番環境のデータベースにエラーの原因があることを確認したので、本番環境のデータベースをリセットし、再度マイグレートを行い、修正を試みる。

  • 本番環境のデータベースをリセット
    heroku pg:reset DATABASE

  • 本番環境でデータベースをマイグレート
    heroku run rails db:migrate

  • 再度カラムを確認
    Recipe.inspect
    やはりRecipeテーブルにexplanationカラムが無い。
    引用: https://jonconan.site/technical/569

6.本番環境のアプリを削除→再度作成

データベースをリセットしてもエラー解決には至らなかったため、一度本番環境上のアプリを削除し、再度作成します。
heroku apps:destroy --app アプリ名 --confirm アプリ名
引用: https://qiita.com/chihiro/items/5c3ff400f6cb99deb945

7.解決!

本番環境にて再度データを新規保存しようとしたところ、保存に成功しました。

結論

heroku上のアプリを削除・再作成する。

考察

今回の手法は、本番環境で適当なデータしか保存していなかったため可能ですね。本番環境でのデータ登録は、最後がベストであることを再認識できました。

開発環境

  • ruby 2.6.5
  • rails 6.0.0
  • mysql2 0.4.4
4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5