[英]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.