【问题标题】:Using multiple buckets with ActiveStorage将多个存储桶与 ActiveStorage 一起使用
【发布时间】:2018-08-16 01:43:45
【问题描述】:

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

class MyModel < ApplicationRecord
  ...

  has_one_attached :logo, bucket: 'custom_bucket'

  ...    
end

【问题讨论】:

    标签: ruby-on-rails rails-activestorage


    【解决方案1】:

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

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

    (storage.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
    

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 向 ActiveStorage 添加选项以允许不同的存储桶用于不同的安全上下文会有多困难。在那里,允许开发人员指定自定义前缀也很好。出于异步处理或其他管理的目的,其他系统/应用程序通常需要访问此类存储。
        • 虽然这或多或少地回答了这个问题,但它具有误导性。请提供潜在的替代解决方案。
        猜你喜欢
        • 2012-03-28
        • 1970-01-01
        • 2019-08-27
        • 1970-01-01
        • 2021-06-02
        • 2017-06-03
        • 2013-11-01
        • 2020-12-27
        • 2017-12-13
        相关资源
        最近更新 更多