Tech Racho エンジニアの「?」を「!」に。
  • 開発

[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!

関連記事


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。