Bundler找不到gem的兼容版本

时间:2011-08-22 08:34:03

标签: ruby-on-rails-3 version-control rubygems bundler gemfile

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

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.

如何解决此冲突?

7 个答案:

答案 0 :(得分:50)

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

答案 1 :(得分:29)

您是否在错误消息指出的情况下运行bundle update了? bundle install处理已由Bundler管理的Gemfile和bundle update升级gems的更改。 Gemfile.lock文件锁定版本号,bundle update将更新任何未在Gemfile中直接指定的文件(如gem 'rails', '3.0.9')。

删除Gemfile.lock会有效,但运行bundle update会更好。

答案 2 :(得分:5)

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

答案 3 :(得分:4)

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

gem rails, '4.0.4'

我做了

gem rails

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

答案 4 :(得分:2)

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

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

答案 5 :(得分:1)

注意:删除Gemfile.lock将使新输入到不同的gem。这在您的项目中可能是不可接受的。您的团队或负责人将不允许这样做。

如果您正在使用旧版代码库,例如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

现在它将成功安装

答案 6 :(得分:0)

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

这是我能够在正在维护的其中一个系统上运行bundle install的唯一方法。 该系统的依存关系中有许多古老的宝石(撰写本文时为58颗宝石),因此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错误。