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 update
? bundle 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" 的兼容版本