【Rails】ローカル環境でS3の画像投稿ができるのに、Heroku上でS3に切り替わらない問題


現象

ローカル環境でうまくS3に画像を保管出来た!!
しかし、Heroku側にマージしてもなぜかHerokuのDB上で画像を保管している。。。
エラーも出ない。。
なぜだろうか。。。

原因

今思えば当たり前の話なのですが、、
原因は本番環境用(Heroku)のファイルにActiveStorageの設定をしていないというものでした。

種類 環境 設定ファイル
開発環境 ローカル環境 development.rb
本番環境 Heroku production.rb(⇦こっちに設定入れてなかった)

** 同じミスをしないように手順を残しておきます **

ローカル環境での設定(※aws側の設定は割愛)

①S3を使用するために必要なGemfileを導入

Gemfile.
gem "aws-sdk-s3", require: false

②追記したら、ターミナルにて開発中のアプリに入り「bundle install」を実行

ターミナル.
% bundle install

③development.rbとstorage.ymlファイルも更新

config/environments/development.rb

# S3にて保存されるように設定を変更
# config.active_storage.service = :local
config.active_storage.service = :amazon
config/storage.yml
# S3の設定を追記
amazon:
  service: S3
  region : ap-southeast-1  # リージョンをaws側で確認して記載
  bucket : furimabucket    # バケット名をaws側で確認して記載
  access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %> 
  secret_access_key:  <%= ENV['AWS_SECRET_ACCESS_KEY'] %>

④環境変数の追記

③のstorage.ymlにて「AWS_ACCESS_KEY_ID」「AWS_SECRET_ACCESS_KEY」を設定しているので開発中のアプリにて環境変数を追記。

ターミナル.
% vim ~/.zshrc

「i」で編集モードにして2つの変数を登録

ターミナル.
export AWS_ACCESS_KEY_ID="Access key IDの値"
export AWS_SECRET_ACCESS_KEY="Secret access keyの値"

編集が終わったら、[ESC]→:wqで終了
続いて、環境変数の設定ファイルを読み込み直す

ターミナル.
% source ~/.zshrc

これで、ローカル環境でS3の画像投稿ができた!!!!!!
以降は、本番環境(Heroku)への反映手順となります。

本番環境(Heroku)への反映

①まずは忘れずにproduction.rbの更新
storage.ymlは特に変更なし。

config/environments/production.rb

# 本番環境でもS3にて保存されるように設定
config.active_storage.service = :amazon

②ターミナルにてHerokuにログイン

ターミナル.
% heroku login --interactive

③本番環境でも環境変数を設定
環境変数を確認したい場合は「% heroku config」

ターミナル.
% heroku config:set AWS_ACCESS_KEY_ID="Access key IDの値"
% heroku config:set AWS_SECRET_ACCESS_KEY="Secret access keyの値"

④あとはコミットして完了

ターミナル.
% git add .
% git commit -m "ストレージの変更(S3)"
% git push heroku master

お疲れ様でした。