Carrierwave/Fog/S3"不是公认的存储提供商"

and*_*nix 8 ruby-on-rails amazon-s3 carrierwave

我有一个使用Carrierwave进行文件上传的Rails应用程序.它一直工作正常,但我想开始使用Amazon S3进行图像存储.我收到此错误:

ArgumentError ( is not a recognized storage provider):
  app/controllers/salons_controller.rb:52:in `update'
Run Code Online (Sandbox Code Playgroud)

我已经确定我有Carrierwave和Fog的最新宝石.这是在我的Gemfile中:

gem 'carrierwave'
gem 'aws-sdk'
gem 'fog'
Run Code Online (Sandbox Code Playgroud)

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'} 
Run Code Online (Sandbox Code Playgroud)

结束

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
Run Code Online (Sandbox Code Playgroud)

如果我将存储更改回'file',它可以正常工作.将存储设置为"雾"会生成此错误.

and*_*nix 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中.

我不知道我在哪里获得了这个位置,但是一旦我将配置移动到正确的位置,一切都很好.

  • 你不是白痴.我做了同样的事情!这是因为载波自述文件中的含糊不清(搜索lib/carrierwave/storage). (7认同)
  • 另一个同类型的白痴= p (2认同)