Rails厨がtimeout()を使うときに注意すべきこと
最近のRailsは1.daysとか3.minitusなどといった便利メソッドが、Fixnumでなく、ActiveSupport::Durationを返すようになっています。みなさんも便利に使っていると思いますが、これをtimeout()と組み合わせるとひどい目に遭うので注意してください。
# ダメな例 timeout(5.seconds) do sleep 10 puts "10秒たったんですケド" end # => 10秒たったんですケド
これはタイムアウトが効きません。めんどうがらずに#to_iしてから使いましょう。
timeout(5.seconds.to_i) do sleep 10 puts "10秒たったんですケド" end # => Timeout::Error起こる
原因も分かったので、しかるべきところに相談しようと思うのですが、ちょっと帯域が埋まっていて動けそうにないので速報まで。