【问题标题】:Rails Page Caching not working and Action Caching throwing 'Filter Chain Halted'Rails 页面缓存不起作用并且动作缓存抛出“过滤器链停止”
【发布时间】:2009-12-16 06:19:04
【问题描述】:

设置

控制器 -> 动作索引 结果 = Model.all(SQL 调用) 看法 循环并从结果中渲染部分。结果行的调用计数(SQL 调用) 部分的 管理结果数据并在 Google 地图上添加点

我正在尝试缓存此页面,因此我将 caches_page :index 添加到我的控制器中。当我查看此页面时,它会创建成功的模板缓存(但不是部分缓存)。但是它仍然会进行所有不应该调用的 sql 调用。

通过更改它 caches_action :index 没有进行 sql 调用,但我收到两个“过滤器链停止”错误。

页面呈现正确,所以我不知道这是否是我应该查看的内容。

如果有人能够解释为什么 caches_page 不工作,或者我应该从这里停止过滤器链的位置,我将不胜感激。

谢谢!

【问题讨论】:

  • 这是在本地还是在您的生产服务器上?页面缓存在本地不做任何事情(与脚本/服务器一起使用时;如果您在开发机器上运行Passenger)。
  • 本地,但根据railsenvy.com/2007/3/20/… 上的指示,我应该能够配置缓存工作。我认为问题在于 environment.rb 中的行: config.action_controller.page_cache_directory = RAILS_ROOT + "/public/cache/" 这告诉 ror 在哪里成功存储缓存但 ror 没有成功读取它。我把上面那行去掉了,现在已经成功读写缓存页面了……

标签: ruby-on-rails caching


【解决方案1】:

首先,如果您想在开发环境中测试缓存,请确保您设置:

# in config/environments/development.rb
config.action_controller.perform_caching = true

其次,页面缓存通过将静态 HTML 文件写入您的 /public 目录,其 URL 与您正在缓存的操作相同。当请求进来时,您的 Web 服务器会看到静态文件并提供服务,完全避免使用 Rails。提供图像的方式相同。如果您更改config.action_controller.page_cache_directory,您的静态文件将被写入错误的目录/URL,并且不会被网络服务器注意到。

最后,如果您对生成静态文件的缓存操作进行更改,请确保删除生成的静态文件,否​​则修改后的操作将不会运行。即使您禁用缓存也是如此!您仍然需要删除这些文件。

【讨论】:

  • 这个问题是由于上面列出的第二个问题。我们目前在共享主机中工作,因此无法配置服务器。但对于其他有此内容的人,请继续阅读:blog.hasmanythrough.com/2008/1/30/segregated-page-cache-storage
  • Rails 初学者的注意事项:如果您更改 config.action_controller.perform_caching,请确保您重新启动网络服务器以使其生效
猜你喜欢
  • 1970-01-01
  • 2016-07-20
  • 2014-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-01
  • 2015-05-07
相关资源
最近更新 更多