アプリケーションサーバ 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).