Created
October 21, 2011 08:55
-
Star
(150)
You must be signed in to star a gist -
Fork
(36)
You must be signed in to fork a gist
-
-
Save cblunt/1303386 to your computer and use it in GitHub Desktop.
Configure Carrierwave for Amazon S3 Storage and Heroku
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Avatar < ActiveRecord::Base | |
mount_uploader :avatar_image, AvatarImageUploader # **must** specify class of uploader, otherwise base uploader is used, and no | |
# ... | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class AvatarImageUploader < CarrierWave::Uploader::Base | |
include CarrierWave::MiniMagick | |
def store_dir | |
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" | |
end | |
version :print do | |
version :thumb { process :resize_to_fit => [32, 32] } | |
version :preview { process :resize_to_fit => [256, 256] } | |
version :full { process :resize_to_fit => [2048, 2048] } | |
end | |
version :web do | |
version :thumb { process :resize_to_fit => [32, 32] } | |
version :preview { process :resize_to_fit => [128, 128] } | |
version :full { process :resize_to_fit => [1024, 768] } | |
end | |
# ... | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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 file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# ... | |
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!-- Nested Versions --> | |
<%= image_tag avatar.avatar_image.url(:web, :preview) %> | |
<%= image_tag avatar.avatar_image.url(:print, :full) %> | |
<%= image_tag avatar.avatar_image.url(:web, :thumb) %> |
Is this MiniMagick specific? What would be the ImageMagick way of doing this?
version :print do
version :thumb { process :resize_to_fit => [32, 32] }
version :preview { process :resize_to_fit => [256, 256] }
version :full { process :resize_to_fit => [2048, 2048] }
end
version :web do
version :thumb { process :resize_to_fit => [32, 32] }
version :preview { process :resize_to_fit => [128, 128] }
version :full { process :resize_to_fit => [1024, 768] }
end
@abatko do you how to get the functionality of :avatar_cache
on heroku with multiple dynos?
an update would be nice since this documentation is over 7 years old. unfortunately i was not able to set up carrierwave with s3 correctly
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@jackson-sandland I believe it is no different than the local approach:
Also, check out How to: Make Carrierwave work on Heroku and note the fact that making this work on Heroku by setting
cache_dir
to"#{Rails.root}/tmp/uploads"
has the adverse side effect of making uploads not work across form redisplays.Also, don't use
f.hidden_field :avatar_cache
as you will occasionally experience undefined method 'to_file' for CarrierWave when hosting on Heroku (due to the fact that each dyno has its own cache directory) - see carrierwaveuploader/carrierwave#725