-
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.
class Avatar < ActiveRecord::Base | |
mount_uploader :avatar_image, AvatarImageUploader # **must** specify class of uploader, otherwise base uploader is used, and no | |
# ... | |
end |
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 |
# 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 |
# ... | |
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 |
<!-- 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) %> |
@jackson-sandland I believe it is no different than the local approach:
<div class="form-group">
<%= f.label :avatar %><br>
<%= f.file_field :avatar, class: 'form-control' %>
<%#= f.hidden_field :avatar_cache %>
</div>
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
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
One crucial component...where is the code that goes into the view to facilitate upload? Locally, you can add <% f.file_field :image %> and this creates an upload button that allows you to upload an image. What is the equivalent of that here?