public
Last active

Configure Carrierwave for Amazon S3 Storage and Heroku

  • Download Gist
Gemfile
Ruby
1 2 3 4
# ...
 
gem 'carrierwave'
gem 'fog', '~> 1.0.0' # Need to specify version, as carrierwave references older (0.9.0) which doesn't allow configuration of Rackspace UK Auth URL
carrierwave.rb
Ruby
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
# config/initializers/carrierwave.rb
 
CarrierWave.configure do |config|
config.fog_credentials = {
# Configuration for Amazon S3 should be made available through an Environment variable.
# For local installations, export the env variable through the shell OR
# if using Passenger, set an Apache environment variable.
#
# In Heroku, follow http://devcenter.heroku.com/articles/config-vars
#
# $ heroku config:add S3_KEY=your_s3_access_key S3_SECRET=your_s3_secret S3_REGION=eu-west-1 S3_ASSET_URL=http://assets.example.com/ S3_BUCKET_NAME=s3_bucket/folder
 
# Configuration for Amazon S3
:provider => 'AWS',
:aws_access_key_id => ENV['S3_KEY'],
:aws_secret_access_key => ENV['S3_SECRET'],
:region => ENV['S3_REGION']
}
 
# For testing, upload files to local `tmp` folder.
if Rails.env.test? || Rails.env.cucumber?
config.storage = :file
config.enable_processing = false
config.root = "#{Rails.root}/tmp"
else
config.storage = :fog
end
 
config.cache_dir = "#{Rails.root}/tmp/uploads" # To let CarrierWave work on heroku
 
config.fog_directory = ENV['S3_BUCKET_NAME']
config.s3_access_policy = :public_read # Generate http:// urls. Defaults to :authenticated_read (https://)
config.fog_host = "#{ENV['S3_ASSET_URL']}/#{ENV['S3_BUCKET_NAME']}"
end

This works great!

This is great! I removed config.s3_access_policy and config.fog_host and it's working very well with fog 1.3.1.

Thanks. I needed to rename the initializer to config/initializers/fog.rb to get it to work.

What is the S3_ASSET_URL?

S3_ASSET_URL is the address of the server where you're uploading your files. For example, if you have the next URL for a uploaded file (that you can get from your S3 console at file properties)

https://s3-eu-west-1.amazonaws.com/my_bucket_name/my_awesome_image.png

S3_ASSET_URL="https://s3-eu-west-1.amazonaws.com"
S3_BUCKET_NAME="my_bucket_name"

config.s3_access_policy= is no longer available. To force http, you can use config.fog_use_ssl_for_aws = false

config.fog_host= doesn't seems to be working.
This link was useful to me: https://github.com/carrierwaveuploader/carrierwave#using-amazon-s3

This gist totally saved me when I was stuck, thank you!!!!!

awesome. It works great. Just don't forget to initialise fog.rb!

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.