这不是我第一次碰到这个,但这是一个具体的例子:
$ bundle update rails
Fetching source index for http://rubygems.org/
Bundler could not find compatible versions for gem "builder":
In Gemfile:
rails (~> 3.0.0) ruby depends on
builder (~> 2.1.2) ruby
hoptoad_notifier (>= 0) ruby depends on
builder (3.0.0)
所以Bundler声称hoptoad_notifier gem依赖于3.0.0版本的构建器。但事实并非如此,它只需要构建器> = 0。
$ gem dependency hoptoad_notifier
Gem hoptoad_notifier-2.4.11
actionpack (>= 0, development)
activerecord (>= 0, development)
activesupport (>= 0, runtime)
bourne (>= 0, development)
builder (>= 0, runtime)
nokogiri (>= 0, development)
shoulda (>= 0, development)
为什么Bundler认为hoptoad_notifier依赖于builder 3.0.0?
Gemfile和Gemfile.lock中的选定位:
source "http://rubygems.org"
gem 'rails', '~> 3.0.0'
gem 'hoptoad_notifier'
...a bunch of testing gems, custom gems, etc.
Gemfile.lock的
GEM
remote: http://rubygems.org/
specs:
actionmailer (2.3.14)
actionpack (= 2.3.14)
...
builder (3.0.0)
...
cucumber (1.2.0)
builder (>= 2.1.2)
diff-lcs (>= 1.1.3)
gherkin (~> 2.10.0)
json (>= 1.4.6)
...
hoptoad_notifier (2.4.11)
activesupport
builder
... no other mentions of builder
答案 0 :(得分:2)
我认为这更像是一个解决方法,而不是问题的答案,所以我会暂时搁置这个问题,看看是否有更好的答案。
我找到了不同的方法来解决问题(使用特定gems上的bundle更新,修改Gemfile,运行bundle install),但是对于各种依赖项继续遇到某种形式的此错误。这似乎是Bundler的一个问题。 (我正在使用v1.0.22,升级让它变得更糟。)最终,让我摆脱困境的是删除Gemfile.lock并运行bundle install,让Bundler从头开始解析所有依赖项。当然,这远非理想,因为你有一个锁文件的全部原因是锁定你的应用程序的依赖项。但是因为我无论如何都要将Rails升级到v3,在这种情况下它是可以接受的。