Bri*_*313 5 ruby-on-rails cdn amazon-web-services asset-pipeline amazon-cloudfront
我们正在运行Rails 5.1站点,该站点利用Asset Pipeline在部署时生成散列(指纹)资产.为了优化性能,我们的资产是从服务器生成的,然后在首次请求时缓存到AWS Cloudfront.
部署时,我们进行滚动部署.我们使用新代码启动新服务器,并使用旧代码终止服务器,因为新代码已联机.在部署期间的任何给定时间,如果请求进入资产,则任何服务器(新的或旧的)都可以应答请求,因为它们都在同一AWS Application Load Balancer上.
例如,我们有两个资产文件:
如果admin-aac83de85860.js的请求进入并且旧服务器接收请求,则它将找不到资产,返回400然后返回该响应缓存.这意味着即使新服务器拥有该文件,所有将来对admin-aac83de85860.js的请求都将返回400.
我们如何获得在AWS Cloudfront中缓存的两组资产,或者仅将新资产的流量直接添加到添加到池中的新服务器?
我通过将资产部署到 S3 解决了这个问题。运行后rails assets:precompile,复制public/assets并public/packs进入S3。然后,您可以将您的 cloudfront 源设置为您放置资产的 s3 存储桶。
当您进行滚动部署时admin-2d1d6c00a49c.js,admin-aac83de85860.js可以在您的 CDN 上访问。
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |