Могу ли я настроить отдельные сегменты S3 в инициализаторе Refile для различных функций в проекте Rails 4?

Я использую Refile Gem для загрузки изображений на S3 в проекте Rails 4. Мое требование состоит в том, чтобы загружать изображения для отдельных функций в два отдельных сегмента на S3.

Тем не менее, я мог найти документацию для настройки только одного ведра. Есть ли способ настроить несколько корзин S3 с помощью Refile?

2 ответа

Основываясь на информации Симоне, я реализовал код в своем собственном проекте, чтобы он эффективно работал.

Refile.store а также Refile.cache включены в конструктор Refile и является ярлыком из Refile.backends['store'] а также Refile.backends['cache'], Так что вам просто нужно добавить бэкэнды в @backends хэш.

aws_base = {
  access_key_id: ENV['S3_ACCESS_KEY'],
  secret_access_key: ENV['S3_SECRET_KEY'],
  region: ENV['S3_REGION'],
}

aws_1 = aws_base.merge({bucket: "bucket-1"})
aws_2 = aws_base.merge({bucket: "bucket-2"})
cache = aws_base.merge({bucket: "caches"})

Refile.backends["backend_1"] = Refile::S3.new(prefix:"store", **aws_1)
Refile.backends["backend_2"] = Refile::S3.new(prefix:"store", **aws_2)
Refile.backends["shared_cache"] = Refile::S3.new(prefix:"store", **cache)

Так вот, как вы устанавливаете разные бэкэнды, и чтобы использовать их отдельно, вам просто нужно обратиться к ним по имени в инициализаторах вложений.

class FirstObject < ActiveRecord::Base
  attachment :images, store: 'backend_1', cache: 'shared_cache'
end

class SecondObject < ActiveRecord::Base
  attachment :images, store: 'backend_2', cache: 'shared_cache'
end

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

Поскольку вы можете настроить имя бэкенда для каждой модели, просто зарегистрируйте новые бэкэнды (например, store_foo а также store_bar) указывать на разные сегменты и передавать имена при настройке соответствующих моделей.

Другие вопросы по тегам