結論
Railsでローカルでは動作するコードがHerokuデプロイ後にエラーになる場合は、以下のコマンドでHeokruを再起動すると解消する場合がある。
heroku restart
事象
RailsでのWEBアプリを開発で以下の改修をした。
TagモデルにTagGroupモデルへの関連を追加する- 管理画面でタグを作成する際に、タググループを付与できるようにする
すると、2.の動作確認中にローカルでは正常に動作していたコードがHeroku上ではエラーになるという事象が発生した。
エラーメッセージ
ActiveModel::UnknownAttributeError (unknown attribute 'tag_group_id' for Tag.)
解決方法
まずはheroku run rails db:migrate:statusでマイグレーションの適用状況がローカルと同じになっているか確認したが問題なかった。
次に以下のコマンドでtagsテーブルのスキーマを確認したがtag_group_idも存在しており問題なさそうだった。
heroku run rails console > ActiveRecord::Base.connection.columns(:tags).map(&:name) => ["id", "created_at", "name", "position", "updated_at", "tag_group_id"]
ChatGPTに聞いたら「高確率で「デプロイ後のアプリコードが古い/再起動が反映されていない」状態です。つまり Heroku の dyno(Rails プロセス)が古いアプリコードをキャッシュしたまま動いている 状況が考えられます。」とのことだった。
heroku restartで再起動することを勧められたので、やってみたらその通りで解消した。