本番環境でseedsファイルを反映させたい

# はじめに
２回目のデプロイ、新しくseedファイルに記述した情報を本番環境にも反映させたい！
しかしエラーが起きてしまったので解決までの流れを記載します✍️

# エラー状況
デプロイを一通り行い、開発環境でログインできていた管理者側にログインするため
ターミナルからEC２にログイン、rails db:seed実行します。

EC2ログイン↓
```
ec2-user:~/environment/アプリ名 (main) $ ssh -i ~/.ssh/practice-aws.pem ec2-user@IPアドレス
```

アプリケーションへ移動↓
```
[ec2-user@ip-172-31-18-108 ~]$ cd アプリ名
```

rails db:seed実行(本番環境の時はRAILS_ENV=productionが必要)↓
```
[ec2-user@ip-172-31-18-108 アプリ名]$ RAILS_ENV=production rails db:seed
```

エラー文がこちら↓
```
rails aborted!
ActiveRecord::RecordInvalid: Validation failed: Email can't be blank, Password can't be blank
```

どうやらEmailとPasswordが空白になっていてバリデーションエラーが起きているようです！
seedsファイルを確認しにいきます！

```seeds.rb
Admin.find_or_create_by!(email: ENV['ADMIN_EMAIL']) do |admin|
  admin.password = ENV['ADMIN_PASSWORD']
end
```

記述はちゃんとできている…ということはENVファイルの記述がおかしい？

```.env
ADMIN_EMAIL="管理者メールアドレス"
ADMIN_PASSWORD="管理者パスワード"
```

ENVファイルもちゃんと記述している…けどデータが取れていない可能性がある…？

ということでデータがちゃんと取れているか確認します！

# エラー解決編
EC２にログインしたターミナルで、本番環境のenvファイルを確認します

```
[ec2-user@ip-172-31-18-108 アプリ名]$ cat .env
```
開発環境で.envに記述したものが出てこない！
というのもENVファイルはGitHubにアップしないので、
GitHubから最新版を取得しただけでは.envファイルは反映されません！！！（当たり前！！）

ということで、本番環境の.envファイルに直接記述していきます

```
[ec2-user@ip-172-31-18-108 アプリ名]$ vim .env
```
このコマンドでenvファイルをvi形式で修正して保存します（操作は割愛します）
rails cでデータが取れるか確認します

```
[ec2-user@ip-172-31-18-108 アプリ名]$ rails c -e production
irb(main):001:0> ENV['ADMIN_EMAIL']
=> ".envファイルに記述したメールアドレス"
```

出力されればOKです！exitで終了します

```
[ec2-user@ip-172-31-18-108 アプリ名]$ RAILS_ENV=production rails db:seed
データを追加しました
```

追加できた！！！よかった！！！


# 余談
余談ですが、このエラーが起きる前に別のエラーが出ておりそれも解決しましたのでメモしておきます。

エラー文↓
```
/home/ec2-user/.rvm/gems/ruby-3.1.2/gems/spring-4.2.1/lib/spring/application.rb:105:in `block in preload': Spring reloads, and therefore needs the application to have reloading enabled.
Please, set config.cache_classes to false in config/environments/production.rb.
(RuntimeError)
```

要するに、Springがアプリケーションの再ロードを行うために`config/environments/production.rb`ファイルを開き、`config.cache_classes`の値を`false`に変更してくださいとのことですね
ただ注意が必要なのが、こちらの記述は本番環境だとfalseに開発環境だとtrueにしないといけないことです

```
[ec2-user@ip-172-31-18-108 アプリ名]$ vim config/environments/production.rb
```
先ほどと同じようにviで該当箇所をfalseに修正して保存します
そこからrails:seedすればOKです

```
[ec2-user@ip-172-31-18-108 アプリ名]$ RAILS_ENV=production rails db:seed
```

最後に修正した箇所を元に戻します
viでもう一度修正してもいいですが他の方法があるので紹介します

```
[ec2-user@ip-172-31-18-108 アプリ名]$ git diff
diff --git a/config/environments/production.rb b/config/environments/production.rb
index 7a3f48b..683c48c 100644   
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -4,7 +4,7 @@ Rails.application.configure do
   # Settings specified here will take precedence over those in config/application.rb.
                                
   # Code is not reloaded between requests.
-  config.cache_classes = true  
+  config.cache_classes = false 
 
   # Eager load code on boot. This eager loads most of Rails and
   # your application in memory, allowing both threaded web servers
```
git diffコマンドを実行すると、修正された箇所を確認することができます

```
[ec2-user@ip-172-31-18-108 アプリ名]$ git checkout -- config/environments/production.rb
```

git checkout -- 修正ファイルパス、ファイル名を指定
上記コマンドで、修正した箇所を元に戻すことができます！
もう一度git diffを実行すると変更点が出てこなくなりました！

```
[ec2-user@ip-172-31-18-108 アプリ名]$ git diff
```

# さいごに
初めてのデプロイでわからないことばかりですが、
なんとかフェーズ２も終わりを迎えそうです！
引き続き頑張ります！