昨日の続き。 RSpecのテストで、./spec/requests/api/*.rbが全滅していたので、それを調べてみました。
まずlib/api.rbを見ると、Grape::APIとあるので、grapeのサイトを見に行って、最近の履歴を眺めつつ、新しいバージョンでの変更点はないかな?と探すとCHANGELOG.mdがあって、そこに
0.3.1 (2/25/2013)
- #351: Compatibility with Ruby 2.0 - @mbleigh.
とあったので、その#351を見に行ったら、@hsbtさんが言ってたprotected なメソッドに対する respond_to? の挙動に関する話だったので、とりあえずgrapeのバージョンを上げました。 そしてspecを走らせると、今度はGrape::Entityが無いと怒られ、これもCHANGELOG.mdを確認したら
0.3.0 (02/21/2013)
- #294: Extracted Grape::Entity into a grape-entity gem - @agileanimal.
とあったので、grape-entityを追加。次は、error_formatが無いと怒られ、これもCHANGELOG.mdを確認したら
0.2.3 (24/12/2012)
- #285: Removed error_format from API settings, now matches request format - @dblock.
とあったので、error_formatを消して、ようやくspecがとおりました。
あとは、ruby 1.9.3p392でテストが壊れていないことを確認してから、フォークして、ブランチ作って、コミットして、プッシュして、pull requestを出すというおなじみの流れ。
これで、まだruby 2.0.0p0で落ちるテストは、spinachが一つと
specが三つ。
四つともプロジェクトのインポート関連なので、たぶん原因は同じだと思うのですが、今のところまだ見つけられていません。 たぶん、その道の人がみたら一瞬で直せたりするんだろうなぁと思いつつ、今日は時間切れ。
でもまあ、テストから判断すれば、「プロジェクトのインポート以外は」すでにruby 2.0.0p0で問題なく動くとも言えるので、手元のGitLabはもうruby 2.0.0p0での運用でいいかな。
[追記] app/models/project_team.rbのdef importを見ると、最後に
rescue false end
というコードがあったので、ここでraiseさせてみると、
NoMethodError: private method `initialize_dup' called for #<UsersProject:0x007ff5427060e0>
おー、まさに@hsbtさんがRailsに出したpull requestまんまのエラー。 いまのところ、この修正が入った3.2系のgemは出ていないので、手元で手パッチしたら、めでたくspecがすべて通りました!
spinachは、全部緑だったけれど、最後にバックトレースがあって、
/home/git/gitlab/app/controllers/team_members_controller.rb:37:in `update': undefined method `update_attributes' for nil:NilClass (NoMethodError) from /home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/actionpack-3.2.12/lib/action_controller/metal/implicit_render.rb:4:in `send_action' ...
うーむ。今度こそ今日は時間切れ。
というわけで、ruby 2.0.0p0対応のRails 3.2系リリースはあるのかしら?