過去をふりかえるフェーズは終わったので、年末リリースに向けて動かない原因となる Ruby や gem の挙動を片っ端から直す業を開始した.
盛大に動かなくて死ぬポイントはbullet にあるような引数で同名の値/メソッドを渡した時の挙動の変更くらいなので、最初にrails/rails の 4-1-stable を指定すればこの問題は解決する。これは 4.1.2 で直るはずなので次に行く.
次に high_voltage が動かなくて何だろうなあと調べていったら、2.2.0 で "//" を含むパスを与えた時の Dir.glob
の挙動が変わっているのが原因だった.
% ruby -ve "p Dir.glob('.//app').any?"
ruby 2.1.2p102 (2014-05-16 revision 45956) [x86_64-darwin13.0]
true
% ruby -ve "p Dir.glob('.//app').any?"
ruby 2.2.0dev (2014-05-15 trunk 45954) [x86_64-darwin13]
false
なんすかこれ〜と n0kada さんに聞いてみたら、true になるけどという話なので trunk をビルドしなおしたら確かに true になっていた.
% ruby -ve "p Dir.glob('.//app').any?"
ruby 2.2.0dev (2014-05-18 trunk 46002) [x86_64-darwin13]
true
ここ数日変えている Dir.glob の余波でついでに 2.1 の挙動に戻っていたみたい。trunk まじ trunk.
他にも Time.stubs(:now).returns(foo)
みたいに Time.now を書き換えている箇所の奥底で time.rb が死んでいたけど、こいつはただのテストコードだったので Rails 4.1 の travel_to ヘルパーで書き直したら解決した。
これで 2.2.0 がいつ挙動変更してもすぐにトレースできるようになった。便利。