34

我在我的 Gemfile 中添加了一个 gem 'koala',当我运行 'bundle install' 命令时,似乎已经抛出了 gem 版本:

Bundler could not find compatible versions for gem "faraday":
In snapshot (Gemfile.lock):
faraday (0.6.1)

In Gemfile:
koala (~> 1.2.0beta1) depends on
  faraday (~> 0.7.4)

Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.

我该如何解决这个冲突?

4

7 回答 7

59

删除 的内容Gemfile.lock,然后bundle install再次运行。这一直对我有用。

于 2011-08-22T15:59:42.873 回答
34

您是否bundle update按照错误消息指出的方式运行? bundle install处理对 Gemfile 的更改并bundle update升级已由 Bundler 管理的 gem。Gemfile.lock 文件锁定版本号,bundle update将更新您的 Gemfile 中未直接指定的任何那些(如gem 'rails', '3.0.9')。

删除 Gemfile.lock 会起作用,但运行bundle update会更好。

于 2011-08-22T19:58:14.020 回答
7

如果这是一个解决方案,您不能简单地删除您Gemfile.lock,那么为什么Gemfile.lock首先存在,您的代码取决于此文件中锁定的版本,尝试仅更新导致冲突的 Gem,bundle update gem_name您必须检查如果需要任何更改以使用新版本,请自述文件,否则您将破坏您的代码或其他代码。

于 2017-01-29T05:31:40.793 回答
5

我发现通过删除指定版本的 rails 为我解决了问题....而不是:

gem rails, '4.0.4'

我做了

gem rails

然后删除 Gemfile.lock 并重新运行bundle install

于 2014-04-03T18:52:08.687 回答
2

如果删除Gemfile.lock不起作用还有另一种可能性:

您所依赖的 gem 可能无意中在其 .gem 文件中包含了自己的 Gemfile.lock。解决方案是将有问题的 gem 更新为不包含 Gemfile.lock,重新构建并重新安装。

于 2013-08-08T21:35:46.213 回答
1

注意:移除Gemfile.lock将会有新的进入不同的宝石。这在您的项目中可能是不可接受的。您的团队或领导不允许这样做。

如果您正在使用遗留代码库,例如 Rails 3.2 或类似版本 如果您遇到此类错误,

看到最后一行Gemfile.lock看起来像

  whenever (~> 0.9.4)
  wicked_pdf (= 1.1.0)
  will_paginate (= 3.1.8)
  wkhtmltopdf-binary-edge (~> 0.12.4.0)

BUNDLED WITH
   1.16.6

现在安装bundler文件中提到的版本。在我的情况下,它的1.16.6.

gem install bundler -v 1.16.6 

现在删除旧版本。如何?

$ gem uninstall bundler

Select gem to uninstall:
 1. bundler-1.16.6
 2. bundler-2.1.4
 3. All versions
> 2
Successfully uninstalled bundler-2.1.4

$ bundle -v     
Bundler version 1.16.6

现在它将成功安装

于 2020-05-19T08:11:18.733 回答
1

另一种方法是转到您Gemfile.lock并删除对有问题的 gem(在本例中为faradaygem)的所有引用。然后运行bundle install,它会更新它Gemfile.lock以在需要的地方拥有兼容的 gem 版本。如果您想更加安全,您可以Gemfile在执行此操作之前转到并指定您想要的 gem 的版本。

这是我能够为bundle install我正在维护的系统之一运行的唯一方法。该系统在其依赖项中有很多旧的 gem(在撰写本文时有 58 个 gem),因此bundler很难处理它。如果我删除Gemfile.lock并运行bundle install它会出现多个Bundler could not find compatible versions for gem xxxxxx 错误。如果我运行bundle update它也会出现多个Bundler could not find compatible versions for gem xxxxxx错误。

于 2019-02-20T10:55:33.183 回答