はじめに
Railsでポートフォリオ作成しAWSにてデプロイ後、S3を使って画像をアップロードする設定を行っていましたが、本番環境にてS3にアップロードされない事態が発生。
#環境
・Rails 6.0.0
・Ruby 2.6.5
・Unicorn 5.4.1
状況
S3の設定をおこない、ローカル環境で無事にS3にアップロードされたことを確認。
本番環境の環境変数をevnに設定してデプロイをおこなったが
画像投稿を行ってもS3にアップロードされなかった。
問題解決のために行ったこと
まずはどのようなエラーが起こっているか確認するため
config/environments/production.rb
を
config.consider_all_requests_local = true
に変更。
これにより、ローカルの時のようにエラー文が画面に表示されるようになります。
するとExcon::Error::Forbiddenというエラーが発生していることが判明。
どうやら環境変数の設定がうまくいっていないよう・・・
sudo vim /etc/environmentにて入力内容を確認
AWS_ACCESS_KEY_ID='#####アクセスキー######'
AWS_SECRET_ACCESS_KEY='##########シークレットアクセスキー##########'
入力ミスはしていなさそう・・・
env | grep AWSで確認
env | grep AWS
AWS_ACCESS_KEY_ID=#####アクセスキー######
AWS_SECRET_ACCESS_KEY=##########シークレットアクセスキー##########'
あれ??
シークレットアクセスキーの最後に’がついている・・?なんで?
もう一度sudo vim /etc/environmentで丁寧に確認してみると・・
AWS_ACCESS_KEY_ID='#####アクセスキー######'
AWS_SECRET_ACCESS_KEY='##########シークレットアクセスキー##########'
図で表現できませんが、
AWS_SECRET_ACCESS_KEY='##########シークレットアクセスキー##########'の最後に
スペースが一つ入っていました・・・
AWS_SECRET_ACCESS_KEY='##########シークレットアクセスキー##########' を
AWS_SECRET_ACCESS_KEY='##########シークレットアクセスキー##########'に直す。
変更を反映させるために一度ログアウトし入り直す。
env | grep AWSで確認
env | grep AWS
AWS_ACCESS_KEY_ID=#####アクセスキー######
AWS_SECRET_ACCESS_KEY=##########シークレットアクセスキー##########
これでもう一度画像投稿を行ったところ、
無事S3にアップロードされました。
さいごに
スペース一つに数日間悩まされました。
ネットで同じような事例がなく、かなり遠回りをしたので
同じような状況で苦しんでいる人の助けになればと思い投稿しました。