2

我正在使用 Refile gem 在 Rails 4 项目中的 S3 上上传图像。我的要求是将用于不同功能的图像上传到 S3 上的两个独立存储桶中。

但是,我可以找到仅设置一个存储桶的文档。无论如何我可以使用 Refile 配置多个 S3 存储桶吗?

4

2 回答 2

2

根据 Simone 的信息,我在自己的项目中实现了代码,因此它可以有效地工作。

Refile.storeRefile.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-11-15T17:54:59.770 回答
1

是的,这应该是可能的。Refile有一个注册表,它存储各种后端,默认情况下它使用一个名为的后端,该后端store在启动时被初始化。

由于您可以为每个模型配置后端名称,因此只需注册指向不同存储桶的新后端(例如store_foo和)并在配置相应模型时传递名称。store_bar

于 2015-09-07T13:48:38.150 回答