I want to upload images on my local machine for development but store them on my Amazon S3 account for production.
upload.rb
if Rails.env.development?
One more solution is to move the hash with params to constants, which will be defined in config/environments/*.rb files. Then you can just use
has_attached_file :proto, PAPERCLIP_STORAGE_OPTS
Using if/unless in model while defining methods is a bit messy I think
Sure. Try something like this:
paperclip_opts = {
:styles => { :thumb => '40x40#', :medium => '150x200>', :large => '300x300>' },
:convert_options => { :all => '-quality 92' },
:processor => [ :cropper ]
}
unless Rails.env.development?
paperclip_opts.merge! :storage => :s3,
:s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
:path => ':attachment/:id/:style.:extension',
:bucket => 'birthdaywall_uploads',
end
has_attached_file :photo, paperclip_opts
In addition to the obvious unless
/merge!
block, also note the use of :all
for :convert_options
instead of specifying an identical option three times.
Why not modify paperclip default options in production.rb?
Add this to config/environments/production.rb:
Paperclip::Attachment.default_options.merge!({
:storage => :s3,
:bucket => 'bucketname',
:s3_credentials => {
:access_key_id => ENV['S3_ACCESS_KEY'],
:secret_access_key => ENV['S3_SECRET_KEY']
}
})