1
0

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 3 years have passed since last update.

S3導入時のcapistranoエラー(ArgumentError: Missing `secret_key_base` for 'production' environment, set this string with `rails credentials:edit`)

Posted at

#はじめに

S3導入の際に自動デプロイでエラーとなりました。
復習も兼ねて投稿します。

#S3の導入

スクールのカリキュラム通りに記述しました。(本番環境のみS3を適用させました)

Gemfile記述

gemfile
gem "aws-sdk-s3", require: false

ターミナル内で「bundle install」を実行

ターミナル
% bundle install

production.rbを編集

config/environments/production.rb

config.active_storage.service = :local

#上記で記述している画像の保存先の設定を「:local」→「:amazon」に変更します。

[変更後↓]
config.active_storage.service = :amazon

####環境変数を設定(←ここでエラー)

私の場合は環境変数をcredentialsで管理しているため、S3に必要な**Access key ID** **Secret access key**もcredentials.yml.encで管理する事にしました。

ローカル環境内の開発中のアプリで実行

ターミナル
$ EDITOR="vi" bin/rails credentials:edit 

上記のコマンドでファイルが開きます。

# User as the base secret for all MessageVerifiers in Rails, including the one protecting cookies.
secret_key_base: 00000000000

db:
 NAME: データベース名
 USERNAME= root 
 PASSWORD= 0000
 HOSTNAME= ap-northeast-1.rds.amazonaws.com 

私の場合はすでにDBにアクセスする環境変数があるので上記にawsのidを記述しました。

###記述
 aws:
  access_key_id: 0000000
  secret_access_key: 0000000
###上記記述


# User as the base secret for all MessageVerifiers in Rails, including the one protecting cookies.
secret_key_base: 00000000000

db:
 NAME: データベース名
 USERNAME= root 
 PASSWORD= 0000
 HOSTNAME= ap-northeast-1.rds.amazonaws.com 

escキー :wqで完了。

datebase.ymlの書き換え

config>datebase.yml
production:
  <<: *default
  database: <%= Rails.application.credentials.db[:NAME] %>
  username: <%= Rails.application.credentials.db[:USERNAME] %>
  password: <%= Rails.application.credentials.db[:PASSWORD] %>
  host: <%= Rails.application.credentials.db[:HOSTNAME] %>
  socket: /var/lib/mysql/mysql.sock

###最後に自動デプロイ
ローカル環境の開発中のアプリで実行

% bundle exec cap production deploy

するとエラーとなりました。

#エラー内容

00:10 deploy:assets:precompile
      01 $HOME/.rbenv/bin/rbenv exec bundle exec rake assets:precompile
      01 rake aborted!
      01 ArgumentError: Missing `secret_key_base` for 'production' environment, set this string with `rails credentials:edit`

今回のエラーで二つミスをしました。

####githubにpushし忘れ

credentialsに記述後これで終わりと思い、すぐに自動デプロイコマンドをしました。(unicornなどはkill済)
credentialsを記述する事でcredentials.yml.encが上書きされるのでpushしなければなりません。

####ymlの書き方

ymlの書き方が特殊で、インデントでも評価される事を知りました。

空白スペースなどにも忠実に記述しなければならないのでもう一度credentialsを確認しました。

問題だった箇所が下記になります。

###記述
 aws:
  access_key_id: 0000000
  secret_access_key: 0000000
###上記記述

「aws」の左隣に空白が入っていました。

aws:
 access_key_id: 0000000
 secret_access_key: 0000000

こうする事でエラーは解消しました。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?