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

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

# 環境
Ruby 3.0.1
rails6.1.7.3
Heroku-20

# トラブルの原因
とりあえずログを見てエラー原因を特定しようと思いターミナルで
```ruby
 heroku logs
```
を実行。
ログを遡ってみると
```ruby
ActiveModel::UnknownAttributeError
 (unknown attribute 'period' for Task.):
```
と言うエラーメッセージを確認することができました。
Taskテーブルに'period'なんてカラムが存在しないと教えてくれています。
そういえば、__テーブルにカラムを追加したけどherokuのマイグレートしてないしそれが原因かなと思ったら......__

# やってみたこと
## Herokuにデーターベースを移行
```ruby
heroku run rails db:migrate
```
を実行してテーブルに`period`カラムを追加してみました。
[こちらのサイト](https://vavolab.com/article/2018/06/05/00/02/01/heroku-postgres%E3%81%A7%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E4%BD%9C%E6%88%90%E3%83%BB%E7%A2%BA%E8%AA%8D%E6%96%B9%E6%B3%95/)を参考にデータベースにちゃんと`period`カラムが追加されているか確認してみると
![スクリーンショット 2023-06-08 20.39.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3379147/35a7d970-246a-168a-e758-c7e38a930c92.png)
確かにperiodカラムが追加されているのを確認！
これで万事解決万々歳とアプリで動作確認をしてみると...

![スクリーンショット 2023-06-08 18.57.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3379147/7d3e01e6-740b-feca-e52f-a1eab6d6cb87.png)
___失敗！！！___
## ログを改めて確認すると
なんでエラー画面が出るんだろうと改めてログを確認してみると
```ruby
ActiveModel::UnknownAttributeError
 (unknown attribute 'period' for Task.):
```
やっぱりこのエラーが発生しています。
### 困ったらリセット
困ったら先人の知恵を頼ろうかなとQiita内を探してみると今の自分に[ぴったりの記事](https://qiita.com/TAKE1219/items/ce50aeeaae56fe73f22a)がありました。
本番環境のデータベースに原因がある時にデータベースをリセットするとエラー解消できるという可能性があると言うことで[記事](https://qiita.com/TAKE1219/items/ce50aeeaae56fe73f22a)を参考にHerokuのデーターベースを削除・改めてマイグレートをし、これで勝ったと思ったら...
![スクリーンショット 2023-06-08 18.57.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3379147/92ec4f9f-70ae-9e0a-adad-b40bccb37954.png)
___失敗？？？___
### スキーマが破損？
よくよく読むと[この記事](https://qiita.com/TAKE1219/items/ce50aeeaae56fe73f22a)でもリセットしただけではエラーが解消されず、アプリを削除・再デプロイしたら解決できたと書いてありました。
とりあえず上の方法で問題を解決できそうなことがわかりましたが、エラーの原因がよくわかりません。
なにかそれらしい原因の解説がないかを探してみると[このサイト](https://stackoverflow.com/questions/33611604/heroku-rails-activerecordunknownattributeerror-unknown-attribute-user-id)にスキーマがうまく同期していないことが原因という記述を発見。
```ruby
rake db:drop db:create db:migrate db:schema:dump db:setup
```
のコマンドと
```ruby
heroku restart
```
をターミナルで実行すると解決すると書いてあります。実際に実行をしてみると無事、新規投稿機能がアプリ上で動作する様になりました
![スクリーンショット 2023-06-08 22.26.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3379147/bec1ba47-cab8-783e-8ecd-e3531b860d1f.png)

## コマンドの解説
```ruby
rake db:drop db:create db:migrate db:schema:dump db:setup
```
ChatGPT先生によると
![スクリーンショット 2023-06-08 22.31.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3379147/55cc4478-0f05-202d-f49e-4182d2a25941.png)
とのこと。
つまりデータベースをリセットするだけではなくて削除して作り直したことが良かったみたいです。

# 参考
[HEROKU POSTGRESでテーブル作成・確認方法](https://vavolab.com/article/2018/06/05/00/02/01/heroku-postgres%E3%81%A7%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E4%BD%9C%E6%88%90%E3%83%BB%E7%A2%BA%E8%AA%8D%E6%96%B9%E6%B3%95/)
[【Rails】Heroku上でのActiveModel::UnknownAttributeError解決方法](https://qiita.com/TAKE1219/items/ce50aeeaae56fe73f22a)
[Heroku Rails - ActiveRecord::UnknownAttributeError (unknown attribute 'user_id' for Timetable.):](https://stackoverflow.com/questions/33611604/heroku-rails-activerecordunknownattributeerror-unknown-attribute-user-id)