2012-04-04 72 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