我在 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。
因此:
- 部署运行平稳,推动变更。
- rake assets:precompile 在部署期间运行,创建一个新命名的 application-new-sha.js 文件。
- 这个新的 js 文件在部署后提供的 HTML 页面中被引用,带有 CDN URL。
- CDN 中的 JS 版本来自较旧的部署。
- 替换 Rails 服务器主机的 JS 版本得到正确的 JS。
- 登台服务器没有这个问题,唯一的区别是资产的来源是 HTTP 而不是 HTTPS。
这绝对令人抓狂。
我正在考虑重新使用 S3 和asset_sync gem 来避免这个问题。
关于解决此问题的任何建议?或解决这个问题?