3

我在 Heroku 上使用 Rails 4,force_ssl = true,asset_host 配置为 Cloudfront CDN,该 CDN 配置为使用 Heroku rails 服务器作为源,并将“匹配协议”设置为 true。我在使用自签名证书的登台实例上有类似的设置。由于自签名,在暂存实例上,force_ssl 为 false,并且 CDN 配置为强制使用 HTTP(而不是 HTTPS)。

问题是生产服务器部署无法刷新 CDN 的缩小版 application.js。SHA 随每次部署而变化,并且我已经验证:

  • CDN 中的版本与将主机 URL 替换为 Heroku 服务器的版本不同CDN 服务于旧版本的 JS。

因此:

  1. 部署运行平稳,推动变更。
  2. rake assets:precompile 在部署期间运行,创建一个新命名的 application-new-sha.js 文件。
  3. 这个新的 js 文件在部署后提供的 HTML 页面中被引用,带有 CDN URL。
  4. CDN 中的 JS 版本来自较旧的部署。
  5. 替换 Rails 服务器主机的 JS 版本得到正确的 JS。
  6. 登台服务器没有这个问题,唯一的区别是资产的来源是 HTTP 而不是 HTTPS。

这绝对令人抓狂。

我正在考虑重新使用 S3 和asset_sync gem 来避免这个问题。

关于解决此问题的任何建议?或解决这个问题?

4

0 回答 0