20

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

class MyModel < ApplicationRecord
  ...

  has_one_attached :logo, bucket: 'custom_bucket'

  ...    
end
4

3 回答 3

14

虽然没有办法使用特定的“桶”,但可以很容易地为多个桶添加多个活动存储配置(我相信在 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

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

于 2020-10-27T17:50:38.340 回答
0

没有,对不起。Active Storage 专为与单个存储桶一起使用而设计。

于 2018-03-09T18:51:23.437 回答
0

您可以遵循与传统 database.yml 文件如何继承只是 YML 变量的设置类似的模式。我的 storage.yml 文件看起来有点像这样,它允许我将每个 Active Storage 附件类型存储在它们自己的文件夹中。

为 DO 提供者提供支持的 S3 提供者需要一个我刚刚指定为“默认”的存储桶名称,但您可以将其称为“全部”或“通用”,然后仅覆盖您关心的那些。

(存储.yml)

do: &do
  service: S3
  endpoint: <%= Rails.application.credentials.dig(:digitalocean, :endpoint) %>
  access_key_id: <%= Rails.application.credentials.dig(:digitalocean, :access_key_id) %>
  secret_access_key: <%= Rails.application.credentials.dig(:digitalocean, :secret_access_key) %>
  region: 'nyc3'
  bucket: default

do_user_uploads:
  <<: *do
  bucket: user_uploads

(用户.rb)

has_one_attached :upload, service: :do_user_uploads

希望对您有所帮助,我来这里寻找相同的答案!

于 2021-12-15T22:54:52.383 回答