2010-03-04 64 views
0

我是頁面緩存大部分頁面,並使用動態js文件注入用戶特定內容。Safari緩存頁面過多,如何使用rails添加過期頁眉

所以在我的頭文件我有這樣的事情:

<%= javascript_include_tag '/dynamic_header/current' %> 

這將完成爲執行其被一起返回頁面和處理動態的注射dynamic_header控制器show.js.erb視圖內容。

一切順利,直到我在safari下測試。 (火狐工作正常)

看來safari緩存這個文件過於沉重,並沒有注意到它改變時,這是每次有新的Flash消息或用戶登錄或註銷。

在我的控制器中是否有一個簡單的方法來爲此文件添加過期標題?或者,人們對如何讓Safari瀏覽器發現緩存文件已更改有任何其他建議。

謝謝。

+0

也許我得到的問題是錯的......你問如何防止Safari瀏覽器緩存頁面或JavaScript文件? – 2010-03-04 21:56:48

回答

0

也許你可以添加這個頭:

Cache-Control: no-cache

要做到這一點,最好的辦法可能是掛鉤到rack

2

通常靜態文件有自己的修改日期追加到它們的最終解決緩存問題。由於您的文件是動態的,因此您應該將當前時間添加到路徑末尾。

這不是由javascript_include_tag支持,所以你需要編寫腳本包括標籤用手像這樣:

<script type="text/javascript" src="/dynamic_header/current?t=<%=Time.now.to_i%>"></script> 

祝你好運!

+0

在開發模式下,rails是否已經這樣做? – 2010-03-04 21:38:45

+0

否。高速緩存斷路器用於所有靜態文件的開發和生產。具體來說,當您使用類似javascript_include_tag或stylesheet_tag的標籤時,rails會在public/stylesheets或public/javascripts內搜索該文件,以便它可以將時間戳附加到資產url的末尾。如果該文件不存在(就像在這種情況下,因爲該文件實際上是動態生成的),則跳過此步驟。 – Gdeglin 2010-03-04 22:00:12