Railsの設定
【gemのインストール】
下記2つのgemをインストールします。
gem "aws-sdk-s3", require: false
gem 'fog-aws'
aws-sdk-s3
にはrequire: false
のオプションを設定します。
bundle install
【aws-sdk-s3設定 保存先の変更】
本番環境画像の保存先をlocalからS3に保存されるように設定を変更します。
config.active_storage.service = :amazon # localからamazonに変更
amazon:
service: S3
access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
region: ap-northeast-1 #regionを変更
bucket: <%= ENV['AWS_BUCKET_NAME'] %>
amazon:
service: S3
access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
region: ap-northeast-1 #regionを変更
bucket: your_own_bucket-<%= Rails.env %>
既にstorage.yml内には設定の記述がされています。この部分のコメントアウトを外します。
region
はAWSで設定する地域のことです。日本から一番近い地域を選択するのでap-northeast-1
に変更します。
【fog-awsの設定 アップローダーの編集】
class AvatarUploader < CarrierWave::Uploader::Base
if Rails.env.production?
storage :fog
else
storage :file
end
if Rails.env.production?
本番環境では、storage :fog
を使いそれ以外ではfileを使います。
【carrierwave.rbの編集】
require 'carrierwave/storage/abstract'
require 'carrierwave/storage/file'
require 'carrierwave/storage/fog'
CarrierWave.configure do |config|
config.storage :fog
config.fog_provider = 'fog/aws'
config.fog_directory = 'バケット名'
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'],
aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
region: 'ap-northeast-1', # リージョン
path_style: true
}
end
carrierwave.rbファイルをconfig/initializers配下に作成します。
生成コマンドとかないのか?と思い調べましたが見つからなかったので手動で作成しました。
【テスト環境の設定】
開発環境でテストする場合、環境変数を.envファイルで管理します。
touch .env #.envファイルを作成
AWS_ACCESS_KEY_ID=発行したアクセスキー
AWS_SECRET_ACCESS_KEY=シークレットキー
AWS_BUCKET_NAME=バケット名
.envファイルはGitHub上にあげないよう、.gitignore
ファイルに追加しておきましょう。
.env
追記:アクセスキーとシークレットキーってどこで確認するの?
renderの設定
【環境変数を読めるよう設定】
先ほど.envファイルで環境変数を設定しましたが、.envファイルは.gitignoreに載せているので本番環境には読み込まれていません。
renderで改めて設定する必要があります。
設定したいアプリ名を開く→Environment →SecretFiles
Filenameに.env
Contentsのバーをクリックするとファイルが開かれるので、Railsで設定した.envファイルと同じように記述します。
【補足】
.envファイルで秘匿情報を管理する場合、.envを読み込むためのgemが必要になります。入っていない場合、renderでも.envファイルを読み込めません。
gem 'dotenv-rails'
dotenv-rails
は、Railsアプリケーションで環境変数を扱うためのgemです。このgemは、.env ファイルを作成し、その中に環境変数を定義することで、Railsアプリケーション内でこれらの環境変数を利用できるようになります。
関連記事