gpt4 book ai didi

ruby-on-rails - 在 Rails 滚动部署上使用带有 CDN 的散列 Assets

转载 作者:行者123 更新时间:2023-12-04 05:35:15 25 4
gpt4 key购买 nike

我们正在运行一个 Rails 5.1 站点,该站点利用 Assets 管道在部署时生成散列(指纹) Assets 。为了优化性能,我们的 Assets 从服务器生成,然后在第一次请求时缓存到 AWS Cloudfront。

当我们部署时,我们会进行滚动部署。我们使用新代码启动新服务器,并在新服务器上线时终止使用旧代码的服务器。在部署期间的任何给定时间,如果有 Assets 请求,任何服务器(新的或旧的)都可以响应请求,因为它们都在同一个 AWS Application Load Balancer 上。

例如,我们有两个 Assets 文件:

  • admin-2d1d6c00a49c.js(从旧提交生成)
  • admin-aac83de85860.js(从新提交部署时生成)

  • 如果 admin-aac83de85860.js 的请求传入并且旧服务器接受该请求,则它不会定位 Assets ,返回 400,然后该响应缓存。这意味着所有 future 对 admin-aac83de85860.js 的请求都会返回 400,即使新服务器拥有该文件。

    我们如何将两组 Assets 缓存在 AWS Cloudfront 中,或者仅将新 Assets 的流量引导到添加到池中的新服务器?

    最佳答案

    我能够通过将我们的 Assets 部署到 S3 来解决这个问题。运行后rails assets:precompile , 复制 public/assetspublic/packs进入S3。然后,您可以将您的 Cloudfront 源设置为您放置 Assets 的 s3 存储桶。

    当您进行滚动部署时, admin-2d1d6c00a49c.jsadmin-aac83de85860.js将可以在您的 CDN 上访问。

    见:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DownloadDistS3AndCustomOrigins.html#concept_S3Origin

    关于ruby-on-rails - 在 Rails 滚动部署上使用带有 CDN 的散列 Assets ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50181725/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com