我有一个使用Carrierwave进行文件上传的Rails应用程序。它一直工作正常,但我想开始使用Amazon S3进行图像存储。我收到了这个错误:
ArgumentError ( is not a recognized storage provider):
app/controllers/salons_controller.rb:52:in `update'
我已经确定我拥有Carrierwave和Fog的最新宝石。这是我的Gemfile:
gem 'carrierwave'
gem 'aws-sdk'
gem 'fog'
fog.rb看起来像:
CarrierWave.configure do |config|
config.fog_credentials = {
:provider => 'AWS',
:aws_access_key_id => 'MYACCESSKEY',
:aws_secret_access_key => 'MYSECRETKACCESSKEY',
:region => 'us-east-1'
}
config.fog_directory = 'andrunix'
config.fog_public = true
config.fog_attributes = {'Cache-Control'=>'max-age=315576000'}
端
Uploader类如下所示:
class SalonImageUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
storage :fog
def store_dir
# "andrunix" is the bucket name on S3
"andrunix/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end
如果我将存储更改回'file',它可以正常工作。将存储设置为“雾”会生成此错误。
答案 0 :(得分:28)
在某些时候,我不知道在哪里,我将带有CarrierWave配置的fog.rb文件添加到lib / carrierwave / storage目录中。我绝望了,为Railscasts订阅付了钱,所以我可以看第383集(http://railscasts.com/episodes/383-uploading-to-amazon-s3?autoplay=true)而在3:02我发现了我的方式错误。 Carrierwave配置需要放在config / initializers / carrierwave.rb中。
我不知道我在哪里获得了这个位置,但是一旦我将配置移动到正确的位置,一切都很好。
答案 1 :(得分:-2)
我遇到了同样的问题,人们必须意识到配置文件中的任何拼写错误:&#34; config / initializers / carrierwave.rb&#34;都会导致错误。