在ActiveStorage中使用多个存储桶

Tom*_*ssi 11 ruby-on-rails rails-activestorage

有谁知道是否有办法为特定附件配置自定义存储桶?

class MyModel < ApplicationRecord
  ...

  has_one_attached :logo, bucket: 'custom_bucket'

  ...    
end
Run Code Online (Sandbox Code Playgroud)

kar*_*rns 9

虽然没有一种方法可以使用特定的“buckets”,但可以很容易地为多个 buckets 添加多个活动存储配置(我相信在 v6.1 中引入):

https://edgeguides.rubyonrails.org/active_storage_overview.html#attaching-files-to-records

例如,您可能有一个“amazon_s3_cold”和一个“amazon_s3_hot”,它们将具有除存储桶外的所有相同配置。然后,您可以在 AWS 上相应地配置您的存储桶。

# config/storage.yml

amazon_s3_hot:
   service: S3
   access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
   secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
   region: us-east-1
   bucket: my_hot_bucket
amazon_s3_cold:
   service: S3
   access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
   secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
   region: us-east-1
   bucket: my_cold_bucket

# controllers

class User < ApplicationRecord
    has_one_attached :avatar, service: :amazon_s3_hot
end

class DocumentRecord < ApplicationRecord
    has_one_attached :document_upload, service: :amazon_s3_cold
end
Run Code Online (Sandbox Code Playgroud)

注意 - 热/冷不直接适用于问题,但提供了一些上下文。热/冷存储是一个与云存储服务相关的概念,用于权衡访问频率的成本。


Geo*_*orn -3

抱歉,没有\xe2\x80\x99t。Active Storage 设计用于单个存储桶。

\n

  • 向 ActiveStorage 添加选项以允许不同的安全上下文使用不同的存储桶是多么困难。同时,允许开发人员指定自定义前缀也很好。为了异步处理或其他管理的目的,其他系统/应用程序通常需要访问此类存储。 (2认同)