col*_*rco 8 ruby-on-rails amazon-s3 rails-activestorage ruby-on-rails-6
如果您使用 ActiveStorage 并且您有一个包含 N 个图像的页面,您会收到 N 个对 Rails 应用程序的额外请求(即 N 个重定向)。如果页面上有数十张图像,这意味着浪费大量服务器资源。
我知道重定向对签名 URL 很有用。但是我想知道为什么 Rails 不预先计算最终的签名 URL 并将其嵌入到 HTML 页面中......这样我们可以保持签名 URL/受保护文件的优势,而无需对 Rails 服务器进行 N 次额外调用。
是否可以直接在 HTML 中包含图像变体的最终 URL/预签名 URL(从而避免重定向)?否则,为什么不可能?
col*_*rco 23
经过几天的推理和测试,我对我的最终解决方案感到非常兴奋,我将在下面解释。这是对图像的一种固执己见的方法,可能不代表当前的 Rails Way™?,但是对于提供许多公共图像的网站来说,它具有难以置信的优势,尤其是:
这是解决方案:
storage.example.com)-您甚至可以在存储桶级别禁用公共访问,并使用存储桶策略仅允许访问 Cloudflare ipstorage.example.com指向您的域的 CNAME 配置;您需要使用灵活的 SSL(您可以为子域使用页面规则);使用页面规则设置重缓存:设置 Cache Everything 并为 Browser Cache TTL 和 Edge Cache TTL 设置一个很长的值(例如 1 年)@post.variant(...).processed每次更新或创建之后调用@post;然后在您的视图中使用'https://storage.example.com/' + @post.variant(...).key'(请注意,我们不会processed在视图中调用此处以避免在 s3 中进行额外检查);您还可以有一个 rake 任务来调用processed每个对象,以防您需要重新生成变体;如果您只有很少更改的几个变体(例如,每个帖子 1 个图像/变体),这是完美的上述大部分步骤都是可选的,因此您可以根据需要将它们组合起来。
| 归档时间: |
|
| 查看次数: |
4286 次 |
| 最近记录: |