1

这不是我第一次遇到这种情况,但这里有一个具体的例子:

$ 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 版本的构建器。但事实并非如此,它只需要 builder >= 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
4

1 回答 1

2

我认为这更像是一种解决方法,而不是问题的答案,所以我将把这个问题留一段时间,看看是否有更好的答案。

我找到了不同的方法来解决这个问题(在特定的 gem 上使用包更新,修改 Gemfile,运行包安装),但是对于各种依赖项继续遇到这种错误的某种形式。这似乎是 Bundler 的一个问题。(我使用的是 v1.0.22,升级后情况变得更糟。)最终,让我摆脱困境的是删除 Gemfile.lock 并运行 bundle install,让 Bundler 从头开始​​解决所有依赖项。当然,这远非理想,因为您拥有锁定文件的全部原因是锁定应用程序的依赖项。但由于无论如何我都将 Rails 升级到 v3,所以在这种情况下它是可以接受的。

于 2012-12-26T23:00:13.923 回答