Динамические опции ковша EC2 для тумана / несущей волны - PullRequest
5 голосов
/ 21 марта 2012

У меня есть приложение Rails3, которое использует Carrierwave и Fog для хранения данных на Amazon S3.Это приложение, которое я создаю, требует, чтобы у каждого пользователя было свое собственное безопасное ведро EC2.Предпосылка приложения заключается в том, что пользователь создаст учетную запись (разработает), а я сгенерирую хранилище для этого пользователя только под именем пользователя и паролем EC2 моего приложения.Основываясь на текущей документации, я не видел способа иметь несколько сегментов, так как это настроено в FOG YML.Я хотел бы попросить альтернативы для динамической установки этого FOG_DIRECTORY на основе пользовательских атрибутов.

Я знаю, что есть способ управления динамическими папками, но он не будет работать, так как мне нужны выделенные сегменты для пользователя.

Заранее спасибо!

1 Ответ

3 голосов
/ 06 октября 2012

Предполагая, что ваши ведра уже существуют. Попробуйте следующее:

#config/initializers/carrierwave.rb

CarrierWave.configure do |config|
  #...other configuration stuff...
  config.fog_directory = 'null.example.com'

  config.fog_host = proc do
    proc do |file|
      uploader = file.instance_variable_get :@uploader
      "http://#{uploader.fog_directory}"
    end
  end
end

Обратите внимание на вложенные процедуры, так как на момент написания этого ответа документация для carrierwave неверна. Если вы хотите, чтобы fog_host был динамическим, вам нужно обернуть процесс так, чтобы класс конфигурации carrierwave делал все правильно.

Несмотря на то, что fog_directory устанавливается динамически позже. Тестовые фреймворки и такие жалуются, если в инициализаторе что-то не установлено (все работает правильно, настройка всегда переопределяется).

#app/controllers/application_controller.rb

before_filter :set_bucket

def set_bucket
  CarrierWave.configure do |config|
    config.fog_directory = "#{current_user.id}.bucket.example.com"
  end
end

Измените функцию set_bucket в соответствии с вашим соглашением об именах сегментов.

Вы можете добавить некоторую условную логику, если хотите, чтобы в разработке находился фиксированный сегмент, а не сегмент для пользователя.

Также это сообщение в блоге описывает другой подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...