ボクココ

個人開発に関するテックブログ

Ruby のバージョンを上げてGuard が動かなくなった時の対応

ども、@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、こいつは優秀だな。