ruby-on-rails - Rails 3.1 和 Http 页面缓存

标签 ruby-on-rails heroku ruby-on-rails-3.1 cedar rack-cache

鉴于 Heroku Cedar 没有 Varnish 提供的 http 缓存,我想使用 Rack::Cache .
有人告诉我,rails 3.1.1 有 Rack::Cache默认情况下处于事件状态,我只需要确保在配置中有:

config.action_controller.perform_caching = true

我需要选择一个缓存存储,对于我正在使用的这个实验:
config.cache_store = :memory_store

在我想要缓存的页面的操作中,我添加了以下几行:
response.header['Cache-Control'] = 'public, max-age=300'
response.header['Expires'] = CGI.rfc1123_date(Time.now + 300)

这段代码过去与 Varnish 一起工作正常,第一个请求将返回 200,随后(5 分钟)将返回 304 .

Rails 3.1 和 Heroku Cedar Stack 不会发生这种情况。
我确实在响应中获得了这些 header ,但随后的请求返回 200 而不是 304。

我究竟做错了什么?谢谢你。

最佳答案

正如您所指出的,Cedar 堆栈不使用清漆。这意味着 Web 请求将始终命中 ruby​​ 服务器。

考虑到这一点,Rack::Cache 将尊重您的标题并提供缓存的内容。

但是,由于请求实际上是通过 http 层进入 rails 应用程序,响应将始终为 200,因为缓存不再发生在 http 层。

要确认这是真的,请将其插入您的缓存操作之一:
<%= Time.now.to_i %>
然后,重新加载页面几次,您会注意到时间戳不会改变。

关于ruby-on-rails - Rails 3.1 和 Http 页面缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8184235/

相关文章:

javascript - 在 rails 中使用 jquery 显示工具提示

node.js - Hubspot 融合集成

django - 我在使用 Django 应用程序的 heroku 中收到错误 R14(超出内存配额)

ruby-on-rails - Rails 3.1 Assets 管道预编译错误 - 找不到文件 'jquery'

ruby-on-rails - 具有多个参数的 RSpec 和自定义匹配器

jquery - 在 ruby​​-on-rails 应用程序上使用 AJAX 提交表单后,如何让 jQuery 更新页面上的元素?

ruby-on-rails - Rails 实例变量在开发中显示,但在 Heroku 中不显示

ruby-on-rails - 注释gem和rails 3.1

mysql - 运行SQL语句时出错

ruby-on-rails - 找不到包含 'id' =all 的列表,搜索表单