CarrierWave not working with Fog and S3: ArgumentError…“is not a recognized storage provider”
-
24-05-2021 - |
Вопрос
Maybe this is a bug in CarrierWave? I read similar questions here, tried example code and to reproduce a new app, and it is not working.
I tried old apps with their code that is like the examples on Github, but now it doesn't work.
Full trace: here Gemfile
source 'https://rubygems.org'
gem 'rails', '3.2.2'
gem 'mini_magick', '~> 3.4'
gem 'carrierwave', '~> 0.5.8'
gem 'fog'
gem 'activeadmin', '~> 0.4.3'
gem 'httparty'
gem 'dalli'
gem 'json'
gem "mercury-rails", :git => "https://github.com/jejacks0n/mercury.git"
gem 'newrelic_rpm'
group :assets do
gem 'sass-rails', '~> 3.2.4'
gem 'coffee-rails', '~> 3.2.2'
gem 'uglifier', '>= 1.0.3'
end
gem 'jquery-rails'
gem 'jquery_datepicker'
group :development do
gem 'sqlite3'
end
group :production do
gem 'pg'
end
This is the carrierwave configuration:
# config/carrierwave.rb
# encoding: utf-8
require 'carrierwave'
CarrierWave.configure do |config|
config.fog_credentials = {
:provider => 'AWS', # required
:aws_access_key_id => 'ACCESS_KEY', # required
:aws_secret_access_key => 'SECRET_KEY', # required
:region => 'eu-west-1' # optional, defaults to 'us-east-1'
}
config.fog_directory = 'lkrails' # required
config.fog_host = 'https://lkrails.s3-eu-west-1.amazonaws.com'
config.fog_public = true # optional, defaults to true
config.fog_attributes = {'Cache-Control'=>'max-age=315576000'} # optional, defaults to {}
# Make the tmp dir work on Heroku
# config.cache_dir = "#{Rails.root}/tmp/uploads"
end
This is The uploader
# uploaders/images_uploader.rb
class ImagesUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
storage :fog
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
version :tiny do
process :resize_to_limit => [25, 25]
end
version :thumb do
process :resize_to_limit => [50, 50]
end
version :medium do
process :resize_to_limit => [120, 120]
end
def extension_white_list
%w(jpg jpeg gif png)
end
def filename
if original_filename
@name ||= Digest::MD5.hexdigest(File.dirname(current_path))
"#{@name}.#{file.extension}"
end
end
Решение
According to your logfile, your version of fog is very very old. You're using 0.3.25, and the most recent tag is at 1.1.2. Try doing this:
bundle update fog
Your version of carrierwave is similarly out of date, so I'd bundle update carrierwave
as well. That should help correct this issue.
Другие советы
Adding this for completeness...
After smashing my head against the wall for hours with this error message, I found out that I had this line at the beginning of the carrierwave initializer:
if Rails.env.test?
...
So the initializer was only considered in the test environment. After removing it, everything worked as expected.