【バージョンやら環境】
Rails 5.2.4.3
Ruby 2.5.1
macOS Catalina 10.15.4
Capistrano 3.14.1
【内容】
Capistranoを用いた初回のデプロイは成功している状態で、S3の条件分岐(本番環境のみS3にアップロード)を加えてデプロイ(bundle exec cap production deploy)したら上記のエラーが出ました。
Exception while executing as ec2-user@XXX.XXX.XXX.XXX: rake exit status: 1 (SSHKit::Runner::ExecuteError)
NoMethodError: undefined method `[]' for nil:NilClass
というエラーが出た。
SSHとあるため、てっきりSSHキー系のエラーかと思って、SSHの設定をしなおしたりいじったりしたが直らず。
どうやら、この手のエラーは、別にみるポイントがあるようです。
さらに下を読み進めます。
/var/www/アプリディレクトリ名/releases/20200627035734/config/initializers/carrierwave.rb:15:in `block in <top (required)>'
とあります。config/initializers/carrierwave.rbの15行目でエラーが起きているよ、という意味のようです。
該当の箇所を見に行くと
aws_access_key_id: Rails.application.credentials.aws[:access_key_id],
とありました。つまり、前述の「NoMethodError: undefined method `[]' for nil:NilClass」については、[:access_key_id]がnilだよ、と言われているようです。
どうやら、設定をしたと思っていた、「config/credentials.yml.enc」に記述するAWSのアクセスキー設定ができていなかった模様。(うまく保存されていなかった)。
AWSのアクセスキーを設定し直したらエラーが解決しました。
【あとがき】
最初に記述されていたエラー分がSSHだと書いてあって、キーワードのインパクトにそこだと疑わなかったためエラーの本質に気づくのが遅れました。エラー解決は仮説をできるだけたくさん立てなくてはいけないですね。
デプロイのエラーは少しわかりにくいのですが、恐ろしいことに慣れてきました(少しずつですけど。
最初は大変だと思いますが一個一個根気強く解決していくことが大事ですよね。きっと。
そしてやっぱりがんばれデプロイ担当。