ActiveStorageでアップロードした画像をS3に保存する際に生じたエラーについて書きました。
※ActiveStorageでアップロードした画像をS3に保存する方法は、以下の記事を参考にするとよいと思います。
https://kykt35.hatenablog.com/entry/2019/02/19/093112
エラーの発生内容
上記の記事を参考にしてS3の設定をして、ブラウザで本番環境の挙動を確認しようとしたら、application errorが発生した。
画像
エラーの原因追求
herokuにログインして、heroku環境でrails c(コンソール)コマンドを実行する。
$ heroku run rails c
Running rails c on ⬢ enigmatic-reaches-21915... up, run.1720 (Free)
Traceback (most recent call last):
109: from /app/bin/rails:9:in `<main>'
108: from /app/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require'
.
.
.
画像
エラーの原因発見
/app/vendor/bundle/ruby/2.5.0/gems/aws-sigv4-1.1.0/lib/aws-sigv4/signer.rb:612:in `extract_credentials_provider': Cannot load `Rails.config.active_storage.service`: (Aws::Sigv4::Errors::MissingCredentialsError)
missing credentials, provide credentials with one of the following options:
- :access_key_id and :secret_access_key
- :credentials
- :credentials_provider
ログの一番下を見ると、エラーの原因を発見した。このエラーは、S3のaccess_key_idとsecret_access_keyがherokuの環境上で設定できていないことが原因で起こるエラーのようだ。
画像
解決方法
$ heroku config:set AWS_ACCESS_KEY_ID="<S3で設定したACCESS_KEY>"
Setting AWS_ACCESS_KEY_ID and restarting ⬢ enigmatic-reaches-21915... done, v23
AWS_ACCESS_KEY_ID: <S3で設定したACCESS_KEY>
$ heroku config:set AWS_SECRET_ACCESS_KEY="<S3で設定したSECRET_KEY>"
Setting AWS_SECRET_ACCESS_KEY and restarting ⬢ enigmatic-reaches-21915... done, v24
AWS_SECRET_ACCESS_KEY: <S3で設定したSECRET_KEY>
herokuにログインして、上記のコマンドを実行してS3のaccess_key_idとsecret_access_keyを設定する。そうしたところ、application errorは解決できました。
<参考記事>
・https://qiita.com/nobu0717/items/a34a896f6e7ad68dc54e
・https://teratail.com/questions/199552
・https://qiita.com/m-itoidcf/items/77d064147a32169b5449