#はじめに
S3導入の際に自動デプロイでエラーとなりました。
復習も兼ねて投稿します。
#S3の導入
スクールのカリキュラム通りに記述しました。(本番環境のみS3を適用させました)
Gemfile記述
gem "aws-sdk-s3", require: false
ターミナル内で「bundle install」を実行
% bundle install
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の書き換え
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
こうする事でエラーは解消しました。