Processed Carrierwave images are not uploaded to S3

I have a Carrierwave loading only fine images into S3 buckets. However, if I use RMagick to handle thumbnails, the files are only saved in public tmp locally. Commenting on the process method creates original and large files on S3 (of course, the thumb is not processed). Not sure why processing stops right after writing to local tmp. Code below:

class FileUploader < CarrierWave::Uploader::Base include CarrierWave::RMagick storage :fog def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end # Create different versions of your uploaded files: version :thumb do process :resize_to_fit => [32, 32] end end 

Rails 3.2.5 Fog 1.3.1 Rmagick 2.13.1 Carrierwave 0.6.2 Carrierwave-mongoid 0.2.1

0
ruby-on-rails amazon-s3 carrierwave
source share
1 answer

I recommend you use minimagick:

 class FileUploader < CarrierWave::Uploader::Base include CarrierWave::MiniMagick end 

For the thumb version, I recommend that you use the resize_to_fill method, for example sth:

 version :thumb do process :resize_to_fill => [32, 32] process :convert => :png end 

You can also use a unique token for each image:

 def filename @name ||= "#{secure_token}.#{file.extension}" if original_filename.present? end protected def secure_token var = :"@#{mounted_as}_secure_token" model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.uuid) end 

You must ensure that your connection to your bucket is correct in the confidential file config/initializers/fog.rb sth like:

 CarrierWave.configure do |config| config.fog_credentials = { :provider => 'AWS', :aws_access_key_id => 'your_key', :aws_secret_access_key => 'your_secret_key', :region => 'us-east-1' } config.fog_directory = 'your_bucket_here' config.fog_public = true config.fog_attributes = {'Cache-Control' => 'max-age=315576000'} end 
0
source share

All Articles