【问题标题】:Can I add Shrine upload credentials to the model我可以将 Shrine 上传凭据添加到模型中吗
【发布时间】:2020-04-21 19:28:56
【问题描述】:

我有一个基于 Rails 5 构建的多租户站点,每个租户都添加了自己的 s3 凭据,因此,在其租户站点上发生的任何上传都会上传到他们自己的 s3 帐户。

我目前的问题是 Shrine 似乎只允许我在初始化程序中添加 s3 凭据。这很好用,但我想将它添加到模型中,以便我可以根据当时使用的租户动态填充 s3 凭据。有谁知道无论如何神社可以帮助我吗?

我设法用回形针做到了这一点,但它带来了其他问题,例如后台处理等。

【问题讨论】:

    标签: ruby-on-rails amazon-s3 ruby-on-rails-5 shrine


    【解决方案1】:

    您可以在初始化程序中定义所有存储:

    Shrine.storages = {
      first_storage: Shrine::Storage::S3.new(
      bucket: "my-first-bucket", # required 
      region: "eu-west-1", # required 
      access_key_id: "abc",
      secret_access_key: "xyz"),
    
      second_storage: Shrine::Storage::S3.new(
      bucket: "my-second-bucket", # required 
      region: "eu-east-1", # required 
      access_key_id: "efg",
      secret_access_key: "uvw")
    }
    

    注意:这不是所有的存储代码 - 应该定义 :cache:store 存储。

    然后在模型中使用它们:

    class Photo
      include ImageUploader::Attachment(:image)
    end
    
    photo = Photo.new
    photo.image_attacher.upload(io, :first_storage)
    photo.image_attacher.upload(other_io, :second_storage)
    

    见神殿侍者的doc pagesource code

    【讨论】:

    • 感谢 Aurel,如果我的应用程序不是 SaaS 模型,它会起作用。每个租户都是动态设置的,因此有无限数量的存储。我的租户在注册后将其 AWS 密钥添加到后端。
    • 好吧,Shrine.storages 只是一个散列,因此您可以动态添加和删除存储。此外,Shrine 有 default_storagedynamic_storage 插件可能会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多