5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Rails】デプロイエラー ”NoMethodError: undefined method `[]' for nil:NilClass” の解決方法【デプロイ物語】

Last updated at Posted at 2020-07-16

【バージョンやら環境】

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だと書いてあって、キーワードのインパクトにそこだと疑わなかったためエラーの本質に気づくのが遅れました。エラー解決は仮説をできるだけたくさん立てなくてはいけないですね。

デプロイのエラーは少しわかりにくいのですが、恐ろしいことに慣れてきました(少しずつですけど。
最初は大変だと思いますが一個一個根気強く解決していくことが大事ですよね。きっと。

そしてやっぱりがんばれデプロイ担当。

5
5
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
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?