Общедоступный URL с Fog и Amazon S3 - PullRequest
4 голосов
/ 22 марта 2012

Версии всех RubyGems.Я использую Ruby on Rails 3.1.3, Ruby 1.9.2, CarrierWave 0.5.8 и Туман 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, а для другого - public.

Я пытаюсь перезаписать конфигурации CarrierWave, когда вызывается PageAttachmentUploader, и установить URL для public.Это работает как очарование на локальном компьютере, но не работает на стадии, песочнице и производстве.

Я изменил config.fog_public = true в инициализаторе CarrierWave.Даже это не работает в песочнице.Как мне исправить эту проблему?

Ответы [ 2 ]

23 голосов
/ 23 марта 2012

Нет, вы не должны использовать CarrierWave.configure непосредственно в ваших загрузчиках, так как это изменит конфигурацию по умолчанию для всех загрузчиков, а не только для каждого загрузчика.

Я не знаю, является ли это лучшим решением, но выможно изменить конфигурацию тумана по умолчанию напрямую, установив методы класса в загрузчиках следующим образом:

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

  def self.fog_public
    true # or false
  end
end
1 голос
/ 23 июня 2012

На самом деле лучший способ (я нашел) - это сделать следующее:

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

  configure do |c|
    c.fog_public = true # or false
  end
end

Чувствуется, что это больше соответствует стилю CarrierWave.

...