LoginSignup
2
0

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

Last updated at Posted at 2024-06-10

はじめに

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

エラー状況

デプロイを一通り行い、開発環境でログインできていた管理者側にログインするため
ターミナルからEC2にログイン、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ファイルもちゃんと記述している…けどデータが取れていない可能性がある…?

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

エラー解決編

EC2にログインしたターミナルで、本番環境の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

さいごに

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

2
0
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
2
0