Rails 1.2.3(古い) を使っていて以下のエラーメッセージがでてプログラムが動かなくなって困った。
Tue Sep 16 20:18:22 +0900 2008: Error calling Dispatcher.dispatch
#>Errno::EMFILE: Too many open files - /var/folders/3z/
3zpJeN3yHsCeMKAUi7qYhE+++TI/-Tmp-/CGI.246.251<
一時ファイルが多すぎて、「ファイル開き過ぎだぜコラー」って怒られているらしい。
Linux で動かしている時は大丈夫で、ローカル開発環境なMacで動かしていいるときに怒られる現象。
ulimit コマンドを使っていろいろ設定を大きくしてみるも変わらずエラーを吐く。
% ulimit -a
いろいろググってみたら次の情報に行き着いた。
The Joyent Community Index » Accelerators (not Shared, not Facebook) » Errno::EMFILE (Too many open files)
environment.rb に
Process.setrlimit(Process::RLIMIT_NOFILE, 4096, 65536)
を書き足せばうまく行くらしい。
実際に書き足して、サーバを再起動するとエラーを出さずに動かすことができた。
このコードはプロセスがオープンできるファイルの数を増やすコードらしい。
Ruby 1.8.5 からの機能。
詳しくはここ