Bundler无法找到与gem“bundler”兼容的版本:

31

我是完全不懂Ruby和Rails的新手...之前尝试过一些教程,但只是入门水平。我正在尝试跟着《Ruby on Rails 3 Tutorial》这本书学习,但遇到了一个难题,即使在StackOverflow和Google上搜索也没有找到任何帮助...

目前为止我还没有做过什么,只是:

rails new first_app

然后将Gemfile中的sqlite3更改为

gem 'sqlite3-ruby', '1.2.5', :require => 'sqlite3'

当我运行'bundle install'时,我得到以下信息:

Fetching gem metadata from http://rubygems.org/.........
Bundler could not find compatible versions for gem "bundler":
  In Gemfile:
    rails (= 3.0.1) ruby depends on
      bundler (~> 1.0.0) ruby

  Current Bundler version:
    bundler (1.1.3)

This Gemfile requires a different version of Bundler.
Perhaps you need to update Bundler by running `gem install bundler`?

我尝试通过卸载bundler来解决问题,使用了以下命令:

gem uninstall bundler -v 1.1.3

然后通过以下方式安装bundler v1.0.0

gem install bundler -v 1.0.0

但是它似乎给我安装了 bundler 1.1.2..

我感觉自己走到了死路,再也找不到更多解决这个问题的信息了。

非常感谢任何帮助,并将以丰厚的培根作为回报...

更新 更新 更新

我无法卸载 bundler v 1.1.2。最终我通过执行以下操作成功卸载了所有 gem:

sudo gem list | cut -d" " -f1 > gem_list.txt  
cat gem_list.txt | xargs sudo gem uninstall -aIx  
cat gem_list.txt | xargs sudo gem install

然后重新安装......这使我能够执行'bundle install'并继续进行。谢谢大家的帮助!


2
当你执行 gem list bundler 命令时,它会显示什么?也许你同时安装了 1.0.0 和 1.1.2 两个版本。 - Joshua Cheek
*** 本地宝石 ***bundler (1.1.3, 1.1.2, 1.0.0) - audioeric
7个回答

22

这是因为Ruby Gem也被安装在全局Gemset中,你可以使用以下命令卸载它:

rvm @global do gem uninstall bundler

但是您也可以使用其他版本的bundler,方法如下:

gem install bundler -v '~>1.0.0'
bundle _1.0.0_ install

用已安装的版本替换1.0.0(如果有其他版本)。

对于其他人的参考,我需要安装 1.0 版本的 bundler,但最终安装的是稍微不同的 1.17.3 版本,因此我需要使用 bundle _1.17.3_ install 命令来安装并成功运行。 - stevec

11

首先确认您的版本,确保它们都是最新的:

$ ruby -v
ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-linux]

$ rails -v          
Rails 3.2.2

$ gem list bundler
*** LOCAL GEMS ***
bundler (1.1.3)

如果你需要更新 Ruby 版本,你可以从 https://www.ruby-lang.org 下载新版本或使用类似 ruby-build 的工具。如果你现在正在使用任何 Ruby 1.9.3 版本,则可以暂时不用更新。

要更新所有的 gem:

gem update --system
gem update

Gem 可能会在几个不同的位置安装 gem,这些位置可能相互干扰。有系统 gem(通常由 root 或使用 sudo 安装)和您的个人用户 gem。我喜欢使用一个简单的工具 called rbenv 来管理这些。相关工具是 rvm,二者都可以。

对于您的第一个教程,您可以跳过在 Gemfile 中使用版本号:

- gem 'sqlite3-ruby', '1.2.5', :require => 'sqlite3'
+ gem 'sqlite3-ruby', :require => 'sqlite3'

Bundler将按正确的方式排列所有内容。如果您正在与其他开发人员进行协调或构建生产系统,则最终需要指定版本号。

在这里随时提问,我会添加到此答案中。


Ruby很好,我有1.9.3p125。 - audioeric
当我尝试运行rails -v时,它显示当前未安装...有没有一种方法可以卸载所有内容并重新安装所有内容? - audioeric
好的,我通过以下命令卸载了所有的gems:sudo gem list | cut -d" " -f1 > gem_list.txt cat gem_list.txt | xargs sudo gem uninstall -aIx cat gem_list.txt | xargs sudo gem install现在我可以执行'bundle install'了... 目前问题已经解决.. 谢谢! - audioeric
太好了,很高兴你已经启动了! - joelparkerhenderson

11

也许您的计算机上安装了bundler 1.1.2和1.1.3(可能还有其他版本)

使用

gem list bundler

要检查安装了哪个版本的Bundler,请运行以下命令。

然后,使用指定命令删除您不需要的版本。

gem uninstall bundler -v VERSION_NUMBER

3
我已经安装了三个版本,分别是1.0.0、1.1.2和1.1.3。我可以卸载1.0.0和1.1.3,但无法卸载1.1.2。如果我运行 gem uninstall bundler 命令,则会显示 bundler 未安装。但是,如果我运行 gem list bundler 命令,则会列出 1.1.2 版本... - audioeric

7
您可以使用Rails 3.0的最新版本(3.0.12)。它支持最新的bundler,与3.0.1基本相同。

2

我曾遇到过这个问题,问题的源头在于.gemspec文件中对bundler版本的规定:

spec.add_development_dependency "bundler", "~> 1.16"

去掉版本号解决了这个问题:

spec.add_development_dependency "bundler"

-1

Bundler是Rails的一个依赖gem,因此您只能在gemfile.lock中看到它,而不是gemfile

对于特定的Rails版本,只有一系列的Bundler gems是兼容的。我也遇到了这个错误,我尝试卸载我不需要的那个版本的Bundler gem。我还尝试使用bundle_x.x.x_install强制安装,但当事情没有起作用时,我明确指定了gem的版本,以满足我正在使用的Rails版本所需的范围。也许这不是正确的方法,但这就是我的解决办法。


-2
有时候,为了解决这个问题,只需要删除Gemfile.lock并运行bundle update。我希望它能对某人有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接