在ActiveStorage中使用多个存储桶

时间:2018-03-07 20:29:21

标签: ruby-on-rails rails-activestorage

有没有人知道是否有办法为特定附件配置自定义存储区?

class MyModel < ApplicationRecord
  ...

  has_one_attached :logo, bucket: 'custom_bucket'

  ...    
end

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

尽管无法使用特定的“存储桶”,但可以轻松地为多个存储桶添加多个活动存储配置(我相信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

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