初めてcapistranoでEC2にデプロイするときにハマったエラーがあったので解決方法ともに共有しようと思います。
EC2環境構築についてはこちらの記事を参考に行いました↓
https://qiita.com/gyu_outputs/items/b123ef229842d857ff39
#エラー内容
$ bundle exec cap production deploy
.
.
.
.
deploy:migrating
01 $HOME/.rbenv/bin/rbenv exec bundle exec rake db:migrate
01 rake aborted!
01 NoMethodError: Cannot load database configuration:
01 undefined method `[]' for nil:NilClass
#原因/解決方法
最初はデータベース関連のエラーかと思いましたが色々調べてみるとdatabase.ymlの環境変数が読み込めないときに表示されるエラーということがわかりました。
database.yml
production:
<<: *default
database: <%= Rails.application.credentials.db[:database] %> #最初に読み込まれるのがデーターベースの環境変数であるためデータベースがロードできないというエラーが表示された。
username: <%= Rails.application.credentials.db[:username] %>
password: <%= Rails.application.credentials.db[:password] %>
socket: <%= Rails.application.credentials.db[:socket] %>
環境変数が読み込めない⇨credentials.ymlが読み込めていない⇨master.keyが読み込めていない
ということがわかりました。
master.keyはconfig/master.keyというファイルに保存されていますがこれをcapistranoで読み込むためには下記の一文を追加する必要がありました。
config/deploy.rb
set :linked_files, %w(config/master.key) #追加
#バージョン
ruby '3.0.2'
rails '6.0.4'
capistrano '3.16.0'