2

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に関連付けられている唯一のコードです。

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 に答える