Railsの恐ろしい罠 その2

Flickr検索
http://ryogrid.myhome.cx:3000/search
が、一つの検索を終えるのに数分かかる*1んだけども、一人が検索してると他のユーザはページの取得すらできない。


もしかしてRailsはシングルスレッドで動いてる? とか疑っていたんだけども、真相は違った。


[Mogrel: Feeling About Questions- Weblog and logic, or magic]
http://rails.office.drecom.jp/ishikawa/archive/23
[Mongrel: Katana Suicide- Weblog and logic, or magic]
http://rails.office.drecom.jp/ishikawa/archive/25
ここらへんに書いてあるように、Railsはスレッドセーフじゃないので、各スレッドでリクエストが来るごとにロックしてるらしい。
って、マルチスレッドの意味ないじゃん・・・・・・。


と、思ったら、
[Rails Environment設定:カンニングペーパー]
http://blueruby.mydns.jp/articles/2006/05/24/configuring-rails-environments-the-cheat-sheet


によると、allow_concurrencyというオプションをtrueに設定しておくとロックしなくなるらしい。
そんなわけで、それを設定したら、Flickr検索もバッチリ動くようになりましたとさ。


※allow_concurrencyをtrueにするとスレッドセーフが保証されなくなるので注意。


ってか、ActiveRecordも同期とってるみたいなんだけど、それが先日の罠の原因じゃないかなと思ったり。

*1:Flickr APIのせい