Apache + Passenger + Rails 3.0 で send_fileが0 byteのファイルを返すとき

はまった。Railsの黒魔術ぷりを久方ぶりに体感。

現象

開発環境をWebRick, SQLite3, Rails 3.0、本番環境を Apache + Passenger, PostgreSQL, Rails 3.0にしていたところ、開発環境においては、send_fileでファイルをちゃんとダウンロードさせられたのだけれども、本番環境になるとファイルサイズが 0 byteのファイルしかダウンロードできない。

解決方法

  1. 応急処置: config/environments/production.rb の「config.action_dispatch.x_sendfile_header = "X-Sendfile"」をコメントアウトする
  2. 根本処置: Apache を nginx に取り替える

今回は、応急処置で対応した。