【发布时间】:2019-02-16 23:08:29
【问题描述】:
我正在使用 Ruby on Rails 构建一个网站。要上传图片,我使用 Active Storage 和 Amazon S3。这里一切都很好。用户可以上传图片,图片可以在网站上查看(图片是公开的)。
现在,在生产中,图片的网址是:https://example.com/rails/active_storage/representations/1ej21h...
将 302 返回到 S3 存储桶: https://my-bucket.amazonaws.com/variants/9jdh2...
我不太喜欢:
- 获取图像的两次往返;
- 向 Rails 服务器发送图像请求;
- 这些图像的呆滞感。
而且我更愿意使用 Cloudfront 来提供这些图像。
我在 Rails Guides、Google 和 StackOverflow 上进行了搜索,但目前没有找到合适的答案。
目前是否有任何解决方案可以将 Cloudfront 与 Active Storage 结合使用?
编辑: 更多上下文:在正常流量和来自不同国家/地区的情况下,每张图片将至少每分钟加载 1000 次。我不想让服务器承受这种压力(它还有其他请求要处理)。我希望用户尽快加载这些图像。因此 Cloudfront 作为这些图像的 CDN(公共图像,无需获取签名的 url)。
【问题讨论】:
-
你指的是rails会攻击服务器让active_job为你的bucket生成一个新的签名url吗?这会导致图像在页面加载时闪烁,而前端在服务器上等待生成签名的 url。您可以应用一个补丁来解决此问题。你能确认这是否是你在说的吗?
-
@Verty00 图像不会闪烁:加载速度很慢,并且图像请求由 rails 服务器处理(实际上是生成一个新的签名 url)。我不需要任何签名,图像是公开的。当用户显示页面时,我希望服务器显示的图像的 url 为my-distribution.cloudfront.net/my-image-url.jpg。所以 Rails 服务器不需要处理不必要的图像请求(例如“绕过签名”)。
-
在下面查看我的答案。这有帮助吗?
标签: ruby-on-rails amazon-s3 ruby-on-rails-5 amazon-cloudfront rails-activestorage