11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWSのS3で本番環境の画像を保存する②Rails、renderでの設定

Last updated at Posted at 2023-11-11

Railsの設定

  
【gemのインストール】
下記2つのgemをインストールします。

Gemfile
gem "aws-sdk-s3", require: false
gem 'fog-aws'

aws-sdk-s3にはrequire: falseのオプションを設定します。

bundle install

  
【aws-sdk-s3設定 保存先の変更】

本番環境画像の保存先をlocalからS3に保存されるように設定を変更します。

config/environments/production.rb
config.active_storage.service = :amazon # localからamazonに変更
config/storage.yml .envで環境変数を設定する場合
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'] %> 
config/storage.yml credentials.yml.encで環境変数を設定する場合
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の設定 アップローダーの編集】

app/uploaders/avatar_uploader.rb
class AvatarUploader < CarrierWave::Uploader::Base

  if Rails.env.production?
    storage :fog
  else
    storage :file
  end

if Rails.env.production?本番環境では、storage :fogを使いそれ以外ではfileを使います。
  
  
【carrierwave.rbの編集】

config/initializers/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ファイルを作成
.env
AWS_ACCESS_KEY_ID=発行したアクセスキー
AWS_SECRET_ACCESS_KEY=シークレットキー
AWS_BUCKET_NAME=バケット名

.envファイルはGitHub上にあげないよう、.gitignoreファイルに追加しておきましょう。

.gitignore
.env

追記:アクセスキーとシークレットキーってどこで確認するの?

renderの設定

  
【環境変数を読めるよう設定】

  
先ほど.envファイルで環境変数を設定しましたが、.envファイルは.gitignoreに載せているので本番環境には読み込まれていません。
renderで改めて設定する必要があります。
Image from Gyazo

設定したいアプリ名を開く→Environment →SecretFiles

Filenameに.env
Contentsのバーをクリックするとファイルが開かれるので、Railsで設定した.envファイルと同じように記述します。

Image from Gyazo
画像は記入例でちょっと違うところがありますので参考までに。

  
【補足】
  
.envファイルで秘匿情報を管理する場合、.envを読み込むためのgemが必要になります。入っていない場合、renderでも.envファイルを読み込めません。

Gemfile
gem 'dotenv-rails'

dotenv-railsは、Railsアプリケーションで環境変数を扱うためのgemです。このgemは、.env ファイルを作成し、その中に環境変数を定義することで、Railsアプリケーション内でこれらの環境変数を利用できるようになります。

関連記事

11
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?