Bundler 找不到 gem 的兼容版本

Posted

技术标签:

【中文标题】Bundler 找不到 gem 的兼容版本【英文标题】:Bundler could not find compatible versions for gem 【发布时间】:2011-10-31 23:18:42 【问题描述】:

我在我的 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.

我该如何解决这个冲突?

【问题讨论】:

【参考方案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

现在它会成功安装

【讨论】:

【参考方案2】:

另一种方法是转到您的 Gemfile.lock 并删除对违规 gem 的所有引用(在本例中为 faraday gem)。 然后运行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 错误。

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

gem rails, '4.0.4'

我做到了

gem rails

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

【讨论】:

【参考方案5】:

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

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

【讨论】:

【参考方案6】:

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

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

【讨论】:

【参考方案7】:

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

【讨论】:

我无法安装 rails_admin,这也为我修复了它。感谢发帖! 这会自动升级你的一大堆宝石。最好一次做一个并进行测试,因为更新 gem 可能会引入错误 如果有人有错误Bundler could not find compatible versions for gem "jekyll",只需删除项目的版本部分Gemfile,我的意思是将gem "jekyll", "~> 4.0.0"更改为gem "jekyll" 来自 JS 世界,我为我的所有 gem 使用了固定版本,然后一切都崩溃了。我想用 Github Pages 配置 Jekyll... 诀窍是删除所有固定版本并删除锁定文件,然后再次运行 bundle

以上是关于Bundler 找不到 gem 的兼容版本的主要内容,如果未能解决你的问题,请参考以下文章

Bundler 找不到 gem "rails" 的兼容版本:用于狂欢

Bundler 找不到 gem "spring" 的兼容版本

Bundler 找不到 gem mandrill-api 的 gem "excon" 的兼容版本

Error-Bundler 找不到 gem“bundle”的兼容版本:在 Heroku 上推送项目时

jruby Bundler 找不到兼容的 json 版本

Bundler 无法与 rbenv 一起使用,找不到 [gem]