我在Rails 4项目中使用Refile gem将图片上传到S3。我的要求是将不同功能的图片上传到S3上的两个不同的存储桶中。
但是,我可以找到仅设置一个存储桶的文档。有没有什么办法可以用Refile配置多个S3存储桶?
发布于 2015-11-16 01:55:00
基于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发布于 2015-09-07 21:48:38
是的,这应该是可能的。重新归档has a registry where it stores the various backends,默认情况下,它使用的backend called store是initialized on boot。
由于您可以使用configure the backend name per model,因此只需注册指向不同存储桶的新后端(例如store_foo和store_bar),并在配置相应的模型时传递名称。
https://stackoverflow.com/questions/32439814
复制相似问题