背景
我目前正在开发一个 Rails 3 项目,我打算将其与 Amazon CloudFront 一起使用,其自定义源指向我的实际 Web 服务器。这意味着我的 Web 服务器将告诉浏览器从 CloudFront 检索静态资产,如果 CloudFront 缓存了资产,它将返回它,如果没有,它将使用我的 Web 服务器的相同路径检索它,然后将其缓存以备将来使用要求。
问题
Amazon CloudFront 在确定是否应该破坏自己的缓存以从其来源重新下载资产时,会丢弃并忽略查询字符串参数。RAILS_ASSET_ID
这显然给 Rails 使用which is to do:生成 URL 的方式带来了问题/assets/path/to/asset.ext?RAILS_ASSET_ID
。使用默认资产 URL,CloudFront 将保留陈旧资产长达 24 小时。
解决方案?
我希望做的是以某种方式覆盖 Rails 3 生成资产标签的方式,以便我可以生成像/assets/RAILS_ASSET_ID/path/to/asset.ext
. 我已经有了如何让 Web 服务器响应这些 URL 的解决方案,我只需要弄清楚如何让 Rails 生成 URL。
笔记
- 我的
RAILS_ASSET_ID
将是我最新的 git 提交哈希的子字符串。设置这将由 capistrano 在部署过程中处理。我可以在每次部署中破坏所有资产缓存,我不需要特定于资产的 ID - 我已经尝试过覆盖
ActionView::Helpers::AssetTagHelper.rewrite_asset_path
,但它似乎不起作用,从我读到的内容来看,这是一个不应依赖的私有方法。 - 先感谢您!