Tech Racho エンジニアの「?」を「!」に。
  • 開発

Rails 3.2: production環境でHEADメソッドが使えない

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にあまりごりごり書くのは良くないのですが、まあ、バージョンアップすればいらなくなるし・・・

CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。