簡體   English   中英

可以在Rails 3.2中基於每個請求禁用機架緩存嗎?

[英]Possible to disable rack-cache on a per-request basis in Rails 3.2?

我一直試圖在Heroku上使用Rails 3.2進行流式傳輸 (請參閱我的帖子: Rails 3.2流式傳輸 )。

我得出的結論是,機架緩存導致了這個問題。 在production.rb中使用config.middleware.delete(Rack::Cache)禁用它似乎可以解決它。 顯然,這會為我的整個應用禁用它。

我只希望它禁用一個流式傳輸請求(在管理端,並且不經常使用)。 這可能嗎? 為了一個小的(但需要的)管理功能而失去緩存是一個很大的失敗。

非常感謝!!!

編輯:我試圖將標題設置為不緩存有問題的操作,但Rack :: Cache仍然導致流失敗。 完全禁用它是迄今為止我找到的唯一解決方案。

我最終不需要禁用Rack-cache。 只需要將self.response.headers['Last-Modified'] = Time.now.ctime.to_s到我的回復中。

雖然你不能禁用它,但你可能不需要; 您可能只需要繞過緩存機制。

根據此處此處的源,如果設置了Cache-Control: no-cache標頭或Pragma: no-cache標頭,則Rack :: Cache將不會嘗試從緩存中提取請求。 這不會禁用它,但它確實讓您確保沒有不應該緩存的請求最終返回緩存響應。

此外,您可以確保Rack :: Cache永遠不會緩存給定操作的響應,例如:

response.headers['Cache-Control'] = 'private,max-age=0,must-revalidate,no-store'

在你的控制器動作中。 這將確保Rack :: Cache(以及任何其他上游代理)不會緩存響應,從而導致后端始終保持新鮮。

如果失敗,那么由於context.rb中的forward方法,您可能會遇到問題。 似乎沒有辦法繞過它,所以如果設置了某個標頭,你可能想要修改Rack :: Cache來調用#call

暫無
暫無

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

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