Могу ли я настроить отдельные сегменты 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
) указывать на разные сегменты и передавать имена при настройке соответствующих моделей.