0

有时我远离互联网,仍然需要处理上传页面。Carrierwave Direct 似乎强制存储 :fog; 无法在开发中覆盖。
是否可以告诉 Carrierwave Direct 使用本地存储 (:file) 并简单地回退到 Carrierwave 的开发配置设置?

在开发配置设置下的carrierwave初始化程序中设置存储:文件不起作用...carrierwave_direct错误,来自“<%= direct_upload_form_for @uploader do |f| %>”的“不是公认的提供者”。

我试图解决carrierwave direct,但是在强制:fog、期望重定向url和期望direct_upload_form_for表单方法之间……carrierwave_direct非常负责。

在开发中使用 storage :file 将是carrierwave_direct gem 的一个受欢迎的功能。有谁知道如何干净地做到这一点?

4

1 回答 1

2

我认为可以这样做:

CarrierWave.configure do |config|
  if Rails.env.development? || Rails.env.test?
    config.storage = :file
    config.asset_host = ENV["dev_url"]
  else
    config.fog_provider = 'fog/aws'                        # required
    config.fog_credentials = {
      provider:              'AWS',                        # required
      aws_access_key_id:     ENV["aws_id"],                        # required
      aws_secret_access_key: ENV["aws_key"],                        # required
      region:                ENV["aws_zone"]                  # optional, defaults to 'us-east-1'
    }
    config.fog_directory  = ENV["aws_bucket"]                          # required
    config.max_file_size  = 600.megabytes # defaults to 5.megabytes
    config.use_action_status = true
    config.fog_public     = false                                        # optional, defaults to true
    config.fog_attributes = { cache_control: "public, max-age=#{365.day.to_i}" } # optional, defaults to {}
  end

end

并在您的上传器中添加:

class SomeUploader < CarrierWave::Uploader::Base
  if Rails.env.development? || Rails.env.test?
    def store_dir
     "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
    end
  end
end
于 2017-10-25T08:30:02.407 回答