2014-06-14 64 views
1

我有这个错误试图上传图片到aws桶。导轨和载波

no implicit conversion of nil into String 

我目前只是使用上传类和初始化文件。

初始化/ carrierwave.rb

Carrierwave.configure do |config| 

    config.storage = :aws 
    config.aws_bucket = 'larfs' 
    config.aws_acl = :public_read 
    config.assets_host = '' 
    config.aws_authenticated_url_expiration = 60 * 6 * 24 * 365 

    config.aws_credentials = { 

     access_key_id: 132abc, 
     secret_access_key: 123abc 

    } 

videouploader类,(在这种情况下只用于图片)

class VideoUploader < CarrierWave::Uploader::Base 

    # Include RMagick or MiniMagick support: 
    # include CarrierWave::RMagick 
    include CarrierWave::MiniMagick 

    # Choose what kind of storage to use for this uploader: 
    storage :file 
    # storage :fog 
    storage :aws 

    # Override the directory where uploaded files will be stored. 
    # This is a sensible default for uploaders that are meant to be mounted: 
    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 

    # Provide a default URL as a default if there hasn't been a file uploaded: 
    # def default_url 
    # # For Rails 3.1+ asset pipeline compatibility: 
    # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) 
    # 
    # "/images/fallback/" + [version_name, "default.png"].compact.join('_') 
    # end 

    # Process files as they are uploaded: 
    # process :scale => [200, 300] 
    # 
    # def scale(width, height) 
    # process r 
    # end 

    # Create different versions of your uploaded files: 
    version :thumb do 
    # process :scale => [50, 50] 
    process :resize_to_fill => [90, 90] 
    end 

    version :index do 
    process :resize_to_fill => [200, 200] 
    end 

    version :medium do 
    # process :scale => [150, 170] 
    process :resize_to_fit => [200, 300] 
    end 

    # Add a white list of extensions which are allowed to be uploaded. 
    # For images you might use something like this: 
    def extension_white_list 
    %w(jpg jpeg gif png) 
    end 

    # Override the filename of the uploaded files: 
    # Avoid using model.id or version_name here, see uploader/store.rb for details. 
    # def filename 
    # "something.jpg" if original_filename 
    # end 

end 

回答

1

添加在Gemfile: -

gem 'carrierwave' 
gem 'rmagick' 
gem 'fog' 
gem 'carrierwave_direct' 

initializers/carrierwave.rb: -

CarrierWave.configure do |config| 
    config.fog_credentials = { 
    provider: "AWS", 
    aws_access_key_id: '132abc', 
    aws_secret_access_key: '123abc' 
    } 
    config.fog_directory = 'larfs' 
end 

videouploader class: -

class VideoUploader < CarrierWave::Uploader::Base 

    # Include RMagick or MiniMagick support: 
    # include CarrierWave::RMagick 
    include CarrierWave::MiniMagick 

    # Choose what kind of storage to use for this uploader: 
    #storage :file 
    storage :fog 
    #storage :aws 

    # Override the directory where uploaded files will be stored. 
    # This is a sensible default for uploaders that are meant to be mounted: 
    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 

    # Provide a default URL as a default if there hasn't been a file uploaded: 
    # def default_url 
    # # For Rails 3.1+ asset pipeline compatibility: 
    # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) 
    # 
    # "/images/fallback/" + [version_name, "default.png"].compact.join('_') 
    # end 

    # Process files as they are uploaded: 
    # process :scale => [200, 300] 
    # 
    # def scale(width, height) 
    # process r 
    # end 

    # Create different versions of your uploaded files: 
    version :thumb do 
    # process :scale => [50, 50] 
    process :resize_to_fill => [90, 90] 
    end 

    version :index do 
    process :resize_to_fill => [200, 200] 
    end 

    version :medium do 
    # process :scale => [150, 170] 
    process :resize_to_fit => [200, 300] 
    end 

    # Add a white list of extensions which are allowed to be uploaded. 
    # For images you might use something like this: 
    def extension_white_list 
    %w(jpg jpeg gif png) 
    end 

    # Override the filename of the uploaded files: 
    # Avoid using model.id or version_name here, see uploader/store.rb for details. 
    # def filename 
    # "something.jpg" if original_filename 
    # end 

end 
1

我花了很多时间试图让carrierwave和雾共同努力上传图片到AWS。

在最后,这是从雾移开并用carrierwave-AWS宝石一样简单 - https://github.com/sorentwo/carrierwave-aws

文档是很容易跟进。

雾是比我需要一个简单的图像上传和carrierwave-aws工作。

切换的好处很多,除非您对特定需求感到满意。