Rails 3.2.8、Rack 1.4.1, RackCache 1.2にて動作確認。
コントローラで
if request.head?
render nothing: true, status: ok
else
# 重い処理
end
のように、HEADリクエストでは余分な処理をしたくないこともあると思います。
上記のif文は、development環境では動くのですが、productionでは動きません。
デフォルトで利用されるRack::CacheのRack middlewareが、HEADを強引にGETに書き換えるため、head?
が常時falseを返してしまいます。
issueとして解決済のようですが、3.2.8では反映されていないようなので、head?
が動作するようにしてみました。
以下のように、config.ruに記載します。
Rack::Cacheより前に入れる必要があるほか、developmentではRack::Cacheが読み込まれず、判定がめんどくさいので一番最初にぶち込んでいます。
本当はconfig.ruにあまりごりごり書くのは良くないのですが、まあ、バージョンアップすればいらなくなるし・・・