記事や画像を投稿するアプリを作って、開発環境では問題なく動くが、なぜか本番環境で投稿すると"We're sorry, but something went wrong."とエラーになってしまった時の対処法です。
##まずログを確認する
heroku logs -t
すると、以下のようなログを発見。
"ActiveModel::UnknownAttributeError (unknown attribute 'カラム名' for モデル名.):"
一度デプロイをした後新たにテーブルに追加したカラムが読み込まれていないのが原因らしい。
##本番環境でもdb:migrateをする
heroku run rake db:migrate
しかしこれでも解消されないので、コンソールで本番環境のテーブルを確認する
##コンソールで本番環境のテーブルを確認
まずコンソールを起動
$ heroku run rails console
コンソール上で「ActiveRecord::Base.connection_config」と入力
pry(main)> ActiveRecord::Base.connection_config
すると、
"=> {:adapter=>"postgresql",
:encoding=>"unicode",
:pool=>5,
:username=>"xxxxxx",
:password=>"xxxxxx",
~}"
のように本番環境でのDBとの接続情報が表示されるので、その次に以下のコードでテーブル情報を確認
pry(main)>ActiveRecord::Base.connection.tables
すると"=> ["テーブル1", "テーブル2"...]"のようにテーブル一覧が出てくる。
ここで、最初に確認したログでエラーメッセージが出ていたモデルのテーブルの中身を確認する。
pry(main)>モデル名.inspect
そうすると
"=> "Post(id: integer, name: string, content: text, created_at: datetime, updated_at: datetime...)"
とカラムと型の一覧が出てくる訳ですが、ここでもやはり後から追加したカラムが読み込まれていない。
##Herokuを再起動する
$ heroku restart
これで解決。
カラムを追加し、db:migrate後にサーバーを再起動していなかったことが原因でした。