ruby-on-rails - 使用 Fog 和 Amazon S3 的公共(public) URL

标签 ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-plugins

所有 RubyGems 的版本。我正在使用 Ruby on Rails 3.1.3、Ruby 1.9.2、CarrierWave 0.5.8 和 Fog 1.1.2。

我也使用 CarrierWave RubyGem 上传图片,使用 Fog RubyGem 上传 Amazon S3上传文件。

在我的 CarrierWave 初始化程序文件中,我有:

CarrierWave.configure do |config|
 config.fog_credentials = {
    provider: 'AWS',
    aws_access_key_id: 'xxx',
    aws_secret_access_key: 'xxx'
  }
  if Rails.env.production?
    config.fog_directory = 'bucket1'
  elsif Rails.env.development?
    config.fog_directory = 'bucket2'
  else
    config.fog_directory = 'bucket3'
  end

  config.fog_public = false
  config.fog_authenticated_url_expiration = 60
end

我有一个上传文件:
class PageAttachmentUploader < CarrierWave::Uploader::Base
 CarrierWave.configure do |config|
   if Rails.env.development? || Rails.env.development? || Rails.env.production?
    config.fog_public = true
   end
  end

 storage :fog
end

我有两个上传文件。我希望将一个设置为私有(private),一个设置为公开。

我试图在调用 PageAttachmentUploader 并设置 URL 时覆盖 CarrierWave 配置公开。这在本地机器中就像魅力一样,但在登台、沙盒和生产中不起作用。

我在 CarrierWave 初始化程序中更改了 config.fog_public = true。即使这在沙盒中也不起作用。我该如何解决这个问题?

最佳答案

不,您不应该直接在上传器中使用 CarrierWave.configure,因为它会更改所有上传器的默认配置,而不仅仅是每个上传器。

我不知道这是否是最好的解决方案,但您可以通过在上传器中设置类方法直接更改默认雾配置,如下所示:

class ImageUploader < CarrierWave::Uploader::Base
  storage :fog

  def self.fog_public
    true # or false
  end
end

关于ruby-on-rails - 使用 Fog 和 Amazon S3 的公共(public) URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9827475/

相关文章:

ruby-on-rails - Rake 任务加载失败 :environment properly

ruby-on-rails - "latex-rails"gem 不生成输出

ruby-on-rails - 自定义路由的rspec get语句怎么写?

ruby-on-rails - Rails 查询对象类有不同吗?

ruby-on-rails - 这是 Rails 3 中的竞争条件问题吗?

ruby-on-rails - has_and_belongs_to_many 给出 "no such table"错误

ruby-on-rails - Ruby On Rails - 路由错误 - 没有路由匹配 { :action= >"show", :controller= >"trips"}

ruby-on-rails - 在 Rails 更新方法中重构硬编码链接的最佳方法?

html - Ruby on Rails 密码字段和文本字段对齐

ruby-on-rails - Rails 中的 JOIN 与 COALESCE 和 ORDER BY