[Rails4] bundlerのエラー「Your Gemfile.lock is corrupt.」

こんにちは、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!

関連記事

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

hachi8833

Twitter: @hachi8833、GitHub: @hachi8833 コボラー、ITコンサル、ローカライズ業界、Rails開発を経てTechRachoの編集・記事作成を担当。 これまでにRuby on Rails チュートリアル第2版の半分ほど、Railsガイドの初期翻訳ではほぼすべてを翻訳。その後も折に触れてそれぞれ一部を翻訳。 かと思うと、正規表現の粋を尽くした日本語エラーチェックサービス enno.jpを運営。 実は最近Go言語が好き。 仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。

hachi8833の書いた記事

週刊Railsウォッチ

インフラ

BigBinary記事より

ActiveSupport探訪シリーズ