アプリケーションサーバ on Ruby 1.9
Ramaze 100% CPU usage with static files on Ruby 1.9.1p0
これ俺もなる.MacでもWindowsでもWEBrickでもMongrelでもなるから,多分Ruby本体の問題っぽい(Ruby 1.8では起こらないし).Ruby 1.9から内部的にどう変わったか知らないので,原因が全然分からないんだよなぁ.Pistosさんがstrace使って調べたら,futexで止まってしまっているようだけどどうなんだろ?
このままだとCSSとか画像が表示されないので厳しい.
追記
Fix strange behaviour when using Fiber
適用したけど直らない.manveruさんもMLの方では「実際の理由については分からない」みたいなこと書いてるので,完璧ではないんだろうな,と.
追追記
Windowsでのサーバが結構酷い.mongrelを入れるとmsvcrt-ruby18.dllが必要と言われるので持ってきたら,rubyが落ちる.Thinはuuidgenを用意して起動しアクセスしたら例外を投げて落ちる.WEBrickは上のような状況.WindowsだとWEBrick以外テストすら出来ないというorz
解決
Response#build shouldn't use its own header by default
これで修正された.この問題が修正されているRamaze2009.02が出てるので,1.9で使う人はこちらのバージョンを使いましょうタイミング的に勘違い(まだ修正されてないので,githubのを見てramaze/current/response.rbの中身を自分で修正しましょう.次のバージョンでは大丈夫).結局の所問題は
h = {1 => nil, 2 => nil} h.each do |k, v| h.delete k h[k] = v end
このコードがRuby 1.9だと無限ループに陥るのと同じ問題だったようだ(ペアが一つだと起こらないのがまたややこしいw).