【问题标题】:Active Storage Permanent Image URL活动存储永久图像 URL
【发布时间】:2019-05-21 01:07:27
【问题描述】:

我正在为一个用 Ruby on Rails 构建的网站创建一个谷歌产品列表。该网站有多家拥有自己前端的商店,因此他们希望为每家商店提供 Google 产品 Feed。

我遇到的问题是,如果我使用 url_for(image),那么我会获得该商店中图像的 URL。但活动存储的工作方式是在默认情况下持续 5 分钟的临时 URL 上。因此,链接将无法在已处理的提要上运行。

图像托管在 S3 存储桶上,因此我可以获得 service_url。但是 Google 不喜欢将来自单独域的图像放到商店中。有没有办法从商店域中获得永久干净的 url?

【问题讨论】:

    标签: ruby-on-rails rails-activestorage


    【解决方案1】:

    我认为你所追求的并不容易。 Active Storage 似乎不支持永久的、不会过期的 URL:"Request has expired" when using S3 with Active Storage

    根据您的设置,可能会有一个有用且(大部分)免破解的解决方法。就我而言,我在拥有我要链接到的文件的记录上设置了自定义 show 操作:

    redirect_to url_for(@record_name.file)

    然后,像往常一样,在我的应用程序中为记录 show 操作使用路径助手,只是通过即将到期的 url_for 呈现我想要的东西。

    【讨论】:

    • 如果我想索引 url 以获得更快的结果怎么办?!
    【解决方案2】:

    试试rails_blob_url

    rails_blob_url(image, disposition: "attachment")
    

    更新:链接已更新。

    【讨论】:

    • 这行得通吗?这个标志的链接是永久的吗?
    • 我仍然在 url 中得到 X-Amz-Expires=300 所以我猜它过期了
    • 我已经更新了链接。
    【解决方案3】:

    您可以使用以下方法获取 Active Storage 附件的完整 URL:

    polymorphic_url(@article.image.variant(resize: '800x600'))
    

    这将提供完整的 url 而不仅仅是路径,并且在 Rails 5.2+

    上运行良好

    【讨论】:

      猜你喜欢
      • 2013-03-23
      • 1970-01-01
      • 2020-06-14
      • 1970-01-01
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      相关资源
      最近更新 更多