LoginSignup
1
1

【Railsアプリ】Heroku上のアプリに最新のコードをデプロイしたらエラー画面が!原因と対処法

Last updated at Posted at 2023-06-08

はじめに

Railsで作ったアプリをHerokuにデプロイ後、普通に動いているのを確認。
その後、改良を重ねたコードをデプロイしたらエラー画面が出る様になってしまいました。
具体的にはCRUD機能のC。Create(新規投稿)機能でデータベースにparamsを登録しようとするととエラー画面が出る様に。
テーブルにカラムを追加したからそれが原因かと思いきや...
色々と対応してみた忘備録となっています。
プログラミング歴1ヶ月ちょっとの初心者ですので、間違いやもっといい方法がありましたらご指南・ご指摘を頂けると幸いです!

環境

Ruby 3.0.1
rails6.1.7.3
Heroku-20

トラブルの原因

とりあえずログを見てエラー原因を特定しようと思いターミナルで

 heroku logs

を実行。
ログを遡ってみると

ActiveModel::UnknownAttributeError
 (unknown attribute 'period' for Task.):

と言うエラーメッセージを確認することができました。
Taskテーブルに'period'なんてカラムが存在しないと教えてくれています。
そういえば、テーブルにカラムを追加したけどherokuのマイグレートしてないしそれが原因かなと思ったら......

やってみたこと

Herokuにデーターベースを移行

heroku run rails db:migrate

を実行してテーブルにperiodカラムを追加してみました。
こちらのサイトを参考にデータベースにちゃんとperiodカラムが追加されているか確認してみると
スクリーンショット 2023-06-08 20.39.15.png
確かにperiodカラムが追加されているのを確認!
これで万事解決万々歳とアプリで動作確認をしてみると...

スクリーンショット 2023-06-08 18.57.26.png
失敗!!!

ログを改めて確認すると

なんでエラー画面が出るんだろうと改めてログを確認してみると

ActiveModel::UnknownAttributeError
 (unknown attribute 'period' for Task.):

やっぱりこのエラーが発生しています。

困ったらリセット

困ったら先人の知恵を頼ろうかなとQiita内を探してみると今の自分にぴったりの記事がありました。
本番環境のデータベースに原因がある時にデータベースをリセットするとエラー解消できるという可能性があると言うことで記事を参考にHerokuのデーターベースを削除・改めてマイグレートをし、これで勝ったと思ったら...
スクリーンショット 2023-06-08 18.57.26.png
失敗???

スキーマが破損?

よくよく読むとこの記事でもリセットしただけではエラーが解消されず、アプリを削除・再デプロイしたら解決できたと書いてありました。
とりあえず上の方法で問題を解決できそうなことがわかりましたが、エラーの原因がよくわかりません。
なにかそれらしい原因の解説がないかを探してみるとこのサイトにスキーマがうまく同期していないことが原因という記述を発見。

rake db:drop db:create db:migrate db:schema:dump db:setup

のコマンドと

heroku restart

をターミナルで実行すると解決すると書いてあります。実際に実行をしてみると無事、新規投稿機能がアプリ上で動作する様になりました
スクリーンショット 2023-06-08 22.26.41.png

コマンドの解説

rake db:drop db:create db:migrate db:schema:dump db:setup

ChatGPT先生によると
スクリーンショット 2023-06-08 22.31.52.png
とのこと。
つまりデータベースをリセットするだけではなくて削除して作り直したことが良かったみたいです。

参考

HEROKU POSTGRESでテーブル作成・確認方法
【Rails】Heroku上でのActiveModel::UnknownAttributeError解決方法
Heroku Rails - ActiveRecord::UnknownAttributeError (unknown attribute 'user_id' for Timetable.):

1
1
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
1
1