2

我的 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 关联的唯一代码。

4

1 回答 1

1

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

Cache-Control: no-cache

这将防止 Rack::Cache 缓存此操作的结果。顺便说一句,您返回的文本不是有效的 json,因此要么将 Content-Type 更改为 text/plain,要么返回类似 {"result":"alive"}

于 2013-02-13T23:42:04.307 回答