こんにちは、hachi8833です。rspecのエラーかと思ったらbundlerの方でした。
症状
- Ruby: 2.1.1
- Rails 4.1
gem install bundler
に続いてbundle
を実行すると以下のエラーが発生することがあります。
Your Gemfile.lock is corrupt. The following gem is missing from the DEPENDENCIES section: 'rspec'
なお今回のエラーは、『Everyday Rails - RSpecによるRailsテスト入門 - テスト駆動開発の習得に向けた実践的アプローチ』のサンプルコード: everydayrails/rails-4-1-rspec-3-0で発生しました。
参考までに、このときのGemfile.lockは以下のとおりでした。コミットは944f452です。
DEPENDENCIES
bcrypt (~> 3.1.7)
bootstrap-sass (~> 3.1.1)
capybara (~> 2.4.3)
coffee-rails (~> 4.0.0)
database_cleaner (~> 1.3.0)
factory_girl_rails (~> 4.4.1)
faker (~> 1.4.3)
guard-rspec (~> 4.3.1)
jbuilder (~> 2.0)
jquery-rails
launchy (~> 2.4.2)
rails (= 4.1.1)
rspec-rails (~> 3.1.0)
sass-rails (~> 4.0.3)
sdoc (~> 0.4.0)
selenium-webdriver (~> 2.43.0)
shoulda-matchers (~> 2.6.2)
spring
spring-commands-rspec (~> 1.0.2)
sqlite3
turbolinks
uglifier (>= 1.3.0)
回避方法
サンプルコードのブランチを順に試している間に、隣のアプリチームのtjmさんがいち早く以下のissueを見つけてくれました。
I updated bundler to 1.11.0 and got an error running bundle install:
...
I found a way to solve the error on Windows:gem uninstall bundler
gem install bundler -v 1.10.6
Then run in your project:
bundle install
...
bundler 1.11以降でこのエラーが起きることがあるようです。私の環境ではbundler 1.13.6でした。
Issueを参考に以下を実行し、Ruby 2.1.1のbundlerを1.10.0に下げてみたところ、正常にインストールできるようになりました。
gem uninstall bundler
gem install bundler -v 1.10.0
bundle
これはあくまで回避方法です。
追記: Fatal: No live threads leftエラーが発生する場合
bundle
を実行したときに、まれにFatal: No live threads left. Deadlock?
で始まるエラーが大量に出力されることがあります。bundlerのスレッドが何かのはずみで残っているときにこのエラーが発生するようです。
その場合は以下のようにbundlerに--jobs=1
オプションを追加することで解消できます。
bundle --jobs=1
エラーが解消すれば、以後は--jobs=1
を付けなくても実行できるようになります。
その後
GithubのリポジトリにIssueを送ったところ、レスをいただきました。近々修正されると思います。Thanks!
関連記事
- Railsのbundle install –deploymentとは何なのか
- [Ruby] エラー: Symbol not found: _rb_Digest_SHA1_Finish (LoadError)