使用多个 Rails ActiveStorage 服务

Nat*_*aan 4 ruby-on-rails amazon-s3 shrine rails-activestorage

我正在使用 ActiveStorage 上传 PDF 和图像。由于一些隐私问题,PDF 需要存储在本地,而图像需要使用 Amazon S3 存储。但是,ActiveStorage 看起来只支持为每个环境设置一种服务类型(除非您使用镜像功能,在这种情况下它不能满足我的需要)

有没有办法在同一环境中使用不同的服务配置?例如,如果模型has_one_attached pdf使用本地服务:

local:
  service: Disk
  root: <%= Rails.root.join("storage") %>
Run Code Online (Sandbox Code Playgroud)

如果另一个模型has_one_attached image使用亚马逊服务:

amazon:
  service: S3
  access_key_id: ""
  secret_access_key: ""
Run Code Online (Sandbox Code Playgroud)

Jos*_*ter 5

Rails 6.1 现在支持这一点。

根据本文,您可以指定service每个要使用的attached

class MyModel < ApplicationRecord
  has_one_attached :private_document, service: :disk
  has_one_attached :public_document,  service: :s3
end
Run Code Online (Sandbox Code Playgroud)