Edited at

S3とherokuの設定に関するエラー

ActiveStorageでアップロードした画像をS3に保存する際に生じたエラーについて書きました。

※ActiveStorageでアップロードした画像をS3に保存する方法は、以下の記事を参考にするとよいと思います。

https://kykt35.hatenablog.com/entry/2019/02/19/093112


エラーの発生内容

上記の記事を参考にしてS3の設定をして、ブラウザで本番環境の挙動を確認しようとしたら、application errorが発生した。


画像

https://gyazo.com/e2dec7f7f1e981ee00368f8e2c3e1fd5


エラーの原因追求

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'
.
.
.


画像

https://gyazo.com/e4e5aa2e2e017caa7306f1ff7ebb850c


エラーの原因発見

/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の環境上で設定できていないことが原因で起こるエラーのようだ。


画像

https://gyazo.com/11394ef3200ae8eb33645233b8995cdb


解決方法

$ 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