A month back I upgraded my Ruby version on RoR-app from 1.9.3 to 2.3.3. I have been successfully using fog
& carrierwave
to upload images to Amazon S3 before that but after the upgrade it stopped working. It does not upload my images to S3 any longer, the folders and files are not created there. What makes this so problematic is that I cannot troubleshoot it at all, I get no error messages or anything.
Versions:
Useful information:
initializers/carrierwave.rb
CarrierWave.configure do |config|
config.storage = 'fog'
config.fog_credentials = {
:provider => 'AWS',
:aws_access_key_id => 'ABC123CODE',
:aws_secret_access_key => '+ABC123CODEKEY',
:region => 'eu-central-1'
}
config.fog_directory = 'myapp-se'
config.cache_dir = "#{Rails.root}/tmp"
config.fog_attributes = {
expires: 1.year.from_now.httpdate,
cache_control: "max-age=#{1.year.to_i}"
}
config.ignore_integrity_errors = false
config.ignore_processing_errors = false
config.ignore_download_errors = false
end
Gift-model (gift.rb) - (related part)
mount_uploader :cached_image, GiftImageUploader
#validates_integrity_of :cached_image
#validates_processing_of :cached_image
validates_integrity_of :cached_image
validates_processing_of :cached_image
validates_download_of :cached_image
file = Tempfile.new(["image", ".jpg"])
file.binmode
begin
open(URI.parse(external_image_url), :allow_redirections => :safe) do |data|
file.write data.read
end
rescue Exception => e
logger.info "Error fetching image for product #{id}: " + e.message
return false
end
file.rewind
self.cached_image = file
begin
self.skip_callbacks = true
if self.save!
logger.info "Successfully cached image for product #{id}"
return true
else
logger.info "Soft Error saving product #{id}"
return false
end
self.skip_callbacks = false
rescue Exception => e
logger.info "Rescue Error saving product #{id}" + e.message
end
Uploader file
class GiftImageUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
storage :fog
def store_dir
"cached/gifts/#{model.id}"
end
def extension_white_list
%w(jpg jpeg gif png)
end
version :s300 do
process resize_to_fit: [300, 300]
end
version :s200, :from_version => :s300 do
process resize_to_fit: [200, 200]
end
version :s150, :from_version => :s200 do
process resize_to_fit: [150, 150]
end
version :sq150 do
process resize_to_fill: [150, 150]
end
version :s75, :from_version => :s150 do
process resize_to_fit: [75, 75]
end
version :sq75 do
process resize_to_fill: [75, 75]
end
end
What I need help with:
I solved this using carrierwave-aws gem. The solution is too complex and too specific for my particular application to be of interest for future readers. Frankly, I am not really sure why this solved this issue.