簡體   English   中英

Heroku&Rails - 清漆HTTP緩存不起作用

[英]Heroku & Rails - Varnish HTTP Cache Not Working

我的heroku網站的根頁面基本上是靜態的,它在生成時在視圖中有一些ruby代碼,但是沒有任何特定於單個用戶的內容,所以我希望它被Varnish緩存並在沒有擊中我的dyno的情況下提供服務(注意)在應用程序中還有其他動態頁面。

Heroku的使它看起來很簡單的在這里 只需添加response.headers['Cache-Control'] = 'public, max-age=300' ,它將在重新生成之前緩存5分鍾。

為了對此進行測試,我進行了更改並將日期( Time.now )輸出到頁面,以查看它是否會在5分鍾內保持不變,但每次我在新瀏覽器上訪問該頁面時都會更新。 在同一個瀏覽器上刷新工作正常,但我認為這是因為瀏覽器緩存,而不是Heroku。

如果有任何幫助,當我做一個卷曲-i來獲取HTTP頭時,我得到這個:

HTTP/1.1 200 OK^M
Server: nginx/0.7.67^M
Date: Thu, 29 Dec 2011 02:03:33 GMT^M
Content-Type: text/html; charset=utf-8^M
Connection: keep-alive^M
Cache-Control: public, max-age=300^M
X-Ua-Compatible: IE=Edge^M
Etag: "8a1b58f048968803980417a2914764d0"^M
X-Runtime: 0.038393^M
Content-Length: 8310^M
X-Varnish: 1040651825^M
Age: 0^M
Via: 1.1 varnish^M

基本上,我想確保它生成一次然后緩存在Varnish中,我錯過了任何選項,我是否需要配置更多內容? 如果您有其他建議來提供快速靜態頁面,我也會喜歡這些。

謝謝!

我相信你的應用程序中有一些東西會導致這個問題(可能標題沒有正確設置?)。

為了測試這個,我建立了一個包含一個緩存和一個未緩存頁面的應用程序(除了將文本呈現到輸出之外)。

http://morning-earth-1972.heroku.com/base/cache

http://morning-earth-1972.heroku.com/base/no_cache

請注意,緩存版本不會在打印時間的五分鍾內更改。

源代碼可以在這里找到: https//github.com/neilmiddleton/heroku_varnish_test_SO_8663326

因此,Heroku正如您所期望的那樣工作。 我最初會查看你的auth系統來檢查那是不是在做什么,因為這是一種非常常見的情況(確保緩存頁面完全安全)

也許您在使用瀏覽器進行測試時發送cookie? 你的請求標題是什么?

如果您的運行卷曲-I http://host.com/兩次,您會得到什么?

問題原來是Heroku有許多Varnish服務器,所以它需要大約10-15頁的刷新,直到頁面緩存在所有服務器上,之后它將保持緩存。 它一直在努力,我只是在幾次刷新后沒有工作就放棄了。

我也增加了max_age,這樣我可以更清楚地看到它,5分鍾的緩存幾乎沒有效果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM