前提
- AWSアカウント作成済み
- IAMユーザ作成済み
- S3のバケット作成済み
Gemのインストール
Gemfileに以下の記述をして、bundle installします。
gem 'carrierwave'
gem 'fog-aws'
carrierwaveの設定
Uploaderクラスを追加します。
rails g uploader Images
app/uploaders/images_uploader.rb
if Rails.env.development? storage :fog elsif Rails.env.test? storage :fog else storage :fog end # storage :fog # Override the directory where uploaded files will be stored. # This is a sensible default for uploaders that are meant to be mounted: def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end def extension_whitelist %w(jpg jpeg gif png) end
config/initializers/carrierwave.rb
CarrierWave.configure do |config| if Rails.env.production? config.storage :fog config.fog_provider = 'fog/aws' config.fog_directory = 'S3のバケット名' 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', # region: ENV['AWS_REGION'], path_style: true } else config.storage :fog config.fog_provider = 'fog/aws' config.fog_directory = 'S3のバケット名' 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', # region: ENV['AWS_REGION'], path_style: true } end
aws_access_key_id S3用に用意したIAMユーザーのアクセスキー
aws_secret_access_key S3用に用意したIAMユーザーのシークレットアクセスキー
次に、モデルにmount_uploaderを設定します。
app/models/photo.rb
class Photo < ActiveRecord::Base mount_uploader :image, ImageUploader end
これで設定は完了です。
使い方
アップロード
<%= f.file_field :image %>
表示
<%= image_tag photo.image.to_s %>
これで、S3を使えるようになったと思います。