我正在使用 Refile gem 在 Rails 4 项目中的 S3 上上传图像。我的要求是将用于不同功能的图像上传到 S3 上的两个独立存储桶中。
但是,我可以找到仅设置一个存储桶的文档。无论如何我可以使用 Refile 配置多个 S3 存储桶吗?
我正在使用 Refile gem 在 Rails 4 项目中的 S3 上上传图像。我的要求是将用于不同功能的图像上传到 S3 上的两个独立存储桶中。
但是,我可以找到仅设置一个存储桶的文档。无论如何我可以使用 Refile 配置多个 S3 存储桶吗?
根据 Simone 的信息,我在自己的项目中实现了代码,因此它可以有效地工作。
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