Rails6 staging環境でunicornが動かないときに確認すること
- 結論
それは、unicornの謎エラー、「master failed to start, check stderr log for details」と格闘していたときのこと...
credentialsではこのように設定しており、
db: host: db_host username: root password: password
こうやって取得しようとしたら....
staging: <<: *default database: db_staging host: Rails.application.credentials.db.host username: Rails.application.credentials.db.username password: Rails.application.credentials.db.password
サーバー側で以下のエラー発生
Unknown MySQL server host 'Rails.application.credentials.db.host' (-2) (Mysql2::Error::ConnectionError)
ネット記事を参考に以下のように修正
staging: <<: *default database: db_staging host: Rails.application.credentials.db[:host] username: Rails.application.credentials.db[:username] password: Rails.application.credentials.db[:password]
しかしこれでもなお動かない。。
Unknown MySQL server host 'Rails.application.credentials.db[:host]'
rails cの中で確認した時は動いたのに... あれ...?
よく見たら上の方に
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
こんな表記があるぞ...?? erbでもないのになんで囲っているんだろう...??
... ... ... ......あ!!!!
このファイル.rbじゃない、.ymlだ!!!!!!
staging: <<: *default database: db_staging host: <%= Rails.application.credentials.db[:host] %> username: <%= Rails.application.credentials.db[:username] %> password: <%= Rails.application.credentials.db[:password] %>
これでとりあえず取得することはできるっぽい。
その後、試しにrspecを実行したところ、以下のエラーが出た。
Failure/Error: require File.expand_path('../config/environment', __dir__) NoMethodError: Cannot load database configuration: undefined method `[]' for nil:NilClass
あれ、credentials使ったの、staging環境だけなのに... と思ったのですが、調べたところどうやら呼ばれなくても実行されるみたいです。
なので、test, staging, developmentの環境で
rails credentials:edit --environment ●●
(●●は各環境)
でstagingと同様に設定を行いました(値は仮のもので問題ないです)
ここまでして無事にローカル環境で動きました。
この後、CircleCIでまた少し詰まったのですがrailsとはあまり関係ないので別記事にしようと思います。
最後までお読みいただき、ありがとうございます。