ども、@kimihom です。
Ruby で開発しているのであれば常に新しいバージョンで開発を続けたいもの。その中で今回は guard が動かなくなったのでその対応メモ。
- Ruby 2.3.3
- guard 2.14.1
エラー内容
こんなエラーが出て開発できなかった。
$ bundle exec guard 22:34:15 - INFO - Run all 22:34:15 - INFO - Running all specs /Users/user/.rbenv/versions/2.3.3/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- bundler (LoadError) from /Users/user/.rbenv/versions/2.3.3/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require' from /Users/user/dev/rails/rails4.2/myapp/bin/spring:8:in `<top (required)>' from bin/rspec:3:in `load' from bin/rspec:3:in `<main>' 22:34:15 - ERROR - Failed: "bin/rspec -f progress -r /Users/user/dev/rails/rails4.2/myapp/vendor/bundle/ruby/2.3.0/gems/guard-rspec-4.6.4/lib/guard/rspec_formatter.rb -f Guard::RSpecFormatter --failure-exit-code 2 spec" (exit code: 1)
まぁ Bundler 周りが怪しいよね、ってのはわかる。
対応ログ
Guardfile
- guard :rspec, cmd: "bundle exec rspec" do + guard :rspec, cmd: "bin/rspec" do ... end
これで spring
経由で rspec が走るとのこと。そしたらこんなエラーが次に出た。
22:37:25 - INFO - Run all 22:37:25 - INFO - Running all specs There is a version mismatch between the spring client and the server. You should restart the server and make sure to use the same version. CLIENT: 1.6.1, SERVER: 2.0.1
どうやら spring
のバージョンが古いみたいなのでアップデート。
$ bundle update spring
そして…
$ bundle exec guard 22:38:43 - INFO - Run all 22:38:43 - INFO - Running all specs Running via Spring preloader in process 28169 ............................................................................................................................................................................................................................... Finished in 13.06 seconds (files took 1.62 seconds to load) XXX examples, 0 failures
よっしゃ!動いた。
得られた教訓
Gem はテストツールも常に最新に更新しておかないとね。それにしても、 bundler
、こいつは優秀だな。