如何在Rails 3中生成资产ID以控制缓存?

3
在Rails中,当提供静态文件时,URL会附加一个“asset ID”,例如:
<script src="/javascripts/application.js?1300371955" ...
<link href="/stylesheets/custom.css?1299690788" ...

当静态文件的时间戳改变时,其URL也会随之改变,浏览器会自动请求新的文件。

我发现使用帮助方法来包含静态资源(如stylesheet_link_tagjavascript_include_tagimage_tag)时,Rails会自动为所有对这些文件的引用添加时间戳。

对于其他没有这些帮助方法的资源,如.swf文件,我该如何实现类似的功能呢?

这种强制重新下载的"策略"有一个名字吗?如果有,它叫什么?

2个回答

4
Rails方法将时间戳附加到资源上的方法称为rails_asset_id,定义在ActionView :: Helpers :: AssetTagHelper中。虽然它是一个私有方法,但可以在helper中访问它,以生成自定义标签的时间戳,如下所示:
def swf_param_tag(path)
  asset_id = rails_asset_id(path)
  "<param name='movie' value='#{path}?#{asset_id}'/>"
end

需要传入路径,因为它会调用File.mtime(path).to_i.to_s来获取最后修改时间。

这里有更多关于asset tag的解释: http://api.rubyonrails.org/classes/ActionView/Helpers/AssetTagHelper.html


0

@Unixmonkey:你的解决方案非常好。

作为另一种选择,还有swf_fu插件:

将Adobe Flash swf文件视为其他资产(图像、JavaScript等),并使用SWFObject 2.2嵌入它们

该插件内置了资产标记


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接