Ruby on rails 3 为什么打电话给a";“机架”;在我的Rails缓存日志中显示的路由?

Ruby on rails 3 为什么打电话给a";“机架”;在我的Rails缓存日志中显示的路由?,ruby-on-rails-3,memcached,rack,dalli,Ruby On Rails 3,Memcached,Rack,Dalli,My Rails 3.2应用程序包含上游负载平衡器的健康检查路径: # routes.rb get 'health' => lambda { |env| [200, {"Content-Type" => 'application/json'}, [ 'Alive.' ] ] } 我还使用Dalli和memcached在我的应用程序中缓存各种对象。我最近一直在使用Dalli调试输出,注意到我的日志中充斥着运行状况检查: # application.rb config.cache_st

My Rails 3.2应用程序包含上游负载平衡器的健康检查路径:

# 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相关的唯一代码。

这可能就是您拥有的Rack::Cache中间件。 修复此问题的最简单的方法(并且有一个好处是通过应用程序的大多数层)是在机架端点中添加与缓存相关的标头:

Cache-Control: no-cache
这将阻止Rack::Cache缓存此操作的结果。 顺便说一句,您返回的文本不是有效的json,因此请将内容类型更改为text/plain,或者返回类似{“result”:“alive”}