To use Amazon S3, add gem "fog-aws" to your Gemfile. You must configure fog_credentials and fog_directory (the bucket name) in a CarrierWave initializer. It is assumed the bucket already exists.
Required S3 permissions for CarrierWave:
s3:ListBuckets3:PutObjects3:GetObjects3:DeleteObjects3:PutObjectAcl
In your uploader class, set storage :fog.
# 1. Add to Gemfile
gem "fog-aws"
# 2. Configure in initializer
CarrierWave.configure do |config|
config.fog_credentials = {
provider: 'AWS', # required
aws_access_key_id: 'xxx', # required unless using use_iam_profile
aws_secret_access_key: 'yyy', # required unless using use_iam_profile
use_iam_profile: true, # optional, defaults to false
region: 'eu-west-1', # optional, defaults to 'us-east-1'
host: 's3.example.com', # optional, defaults to nil
endpoint: 'https://s3.example.com:8080' # optional, defaults to nil
}
config.fog_directory = 'name_of_bucket' # required
config.fog_public = false # optional, defaults to true
config.fog_attributes = { cache_control: "public, max-age=#{365.days.to_i}" } # optional, defaults to {}
end
# 3. Set storage in uploader
class AvatarUploader < CarrierWave::Uploader::Base
storage :fog
end