为什么在我的Rails缓存日志中显示对“机架”路由的调用?

时间:2012-11-21 18:09:35

标签: ruby-on-rails-3 memcached rack dalli

My Rails 3.2 app包含上游负载均衡器的运行状况检查路径:

# routes.rb
get 'health' => lambda { |env| [200, {"Content-Type" => 'application/json'}, [ 'Alive.' ] ] }

我也在使用Dalli和memcached来缓存我的应用程序中的各种对象。我最近一直在使用Dalli调试输出,并注意到我的日志充满了健康检查:

# application.rb
config.cache_store = :dalli_store, "localhost:11211", { :compress => true, :expires_in => 1.day }
Dalli.logger = Logger.new("#{Rails.root}/log/#{Rails.env}_cache.log")
Dalli.logger.level = Logger::DEBUG

# development_cache.log
[DEBUG] Cache read: http://mysite.com/health/?
[DEBUG] Cache read: https://mysite.com:80/health/?
[DEBUG] Cache read: http://mysite.com/health/?
[DEBUG] Cache read: https://mysite.com:80/health/?
[DEBUG] Cache read: http://mysite.com/health/?
[DEBUG] Cache read: https://mysite.com:80/health/?
....

这些运行状况检查是否出于某种原因从缓存中提供?配置在哪里?我显然没有设置页面缓存。此路由是与该URL关联的唯一代码。

1 个答案:

答案 0 :(得分:1)

这可能就是你拥有的Rack :: Cache中间件。 修复它的最简单方法(并且有利于遍历应用程序的大多数层)是在机架端点中添加与缓存相关的标头:

Cache-Control: no-cache

这将阻止Rack :: Cache缓存此操作的结果。 顺便说一下,你要返回的文本不是有效的json,所以要么将Content-Type更改为text / plain,要么返回类似{“result”:“alive”}

的内容。