2012-04-04 70 views
2

我有Rails服务我的静态资产。他们中的大多数人都以他们的名字命名,并且服务于远期将来的失效日期。但是对于一个文件,我无法在其名称中使用散列来提供它,所以我需要控制到期日期。如何使用Rails控制特定文件的最大年龄?

我有这个在我的application.rb中,适用于所有静态资产:

config.static_cache_control = "public, max-age=2592000" 

有我的方式有不同的最大年龄只是一个文件?我知道我可以在ActionDispatch::Static之后创建一个新的中间件,并更改某些文件的值(请参阅this writeup)...但是这会针对每个请求运行,即使那些不是静态资产的请求也会运行。有没有更优雅的解决方案?

+1

可以在服务器级别执行它吗?无论如何,这可能更有意义。 – 2012-04-04 05:08:03

+1

我在这个部署(heroku)中没有这个选项。 – 2012-04-04 05:11:21

+0

我也在使用heroku,这一直是一个亟待解决的问题。 – Ashitaka 2012-04-04 13:15:03

回答

0

一个不好的方法是修复你的文件在你的route.rb中的URL。你可以定义一个Controller到这条路径来修复你想要的cache_control,并使用send_data方法来服务器文件。

+0

被认为是这样的......以及一个混乱的路径,但最终可能是最好的解决方案 – 2012-04-04 19:22:43

+0

这是最简单的,如果你不想添加一个中间件。或者你需要破解ActionDispatch :: Static中间件来完成这项工作。也许用例子来代替它。 – shingara 2012-04-05 07:42:53