繁体   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