【问题标题】:Making each account have a separate S3 bucket for attachments using Shrine使用 Shrine 使每个帐户都有一个单独的 S3 存储桶用于附件
【发布时间】:2016-03-04 01:04:23
【问题描述】:

在我们的 Ruby 中,我希望每个帐户都有一个单独的 S3 存储桶来存放其附件。我还希望存储桶名称可以从帐户的属性中派生:

Account(id: 1, username: "johnny") # uses the "1-johnny" bucket
Account(id: 2, username: "peter")  # uses the "2-peter" bucket
# ...

Shrine 可以做这样的事情吗?

【问题讨论】:

  • 你知道默认的maximum number of buckets is 100?。当您获得更多用户时,这可能会成为问题......
  • 感谢您的关注,我不知道。这仍然可以用于用户数量有限的情况(例如,对于事件的管理者)。
  • Google 云存储对存储桶的总数没有限制,但令人失望的是,可能的名称不受帐户限制。例如,如果您创建一个名为“test”的存储桶,那么我无法创建另一个名为“test”的存储桶。换句话说,名称在整个世界上必须是唯一的。

标签: ruby shrine


【解决方案1】:

是的。首先你使用default_storage插件动态分配存储名称:

Shrine.plugin :default_storage, store: ->(record, name) do
  "store_#{record.id}_#{record.username}"
end

# store_1_johnny
# store_2_peter

接下来,您使用dynamic_storage 插件根据标识符动态实例化 S3 存储:

Shrine.plugin :dynamic_storage

Shrine.storage /store_(\d+)_(\w+)/ do |match|
  bucket_name = "#{match[1]}_#{match[2]}"
  Shrine::Storage::S3.new(bucket: bucket_name, **s3_options)
end

# 1-johnny
# 2-peter

【讨论】:

    猜你喜欢
    • 2021-10-13
    • 1970-01-01
    • 2020-05-29
    • 2018-06-02
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    相关资源
    最近更新 更多