1

我有一个使用 Ruby 1.9.2 的 Rails 3.0.0 项目。现在我尝试在具有当前 rvm 的新计算机上运行它,它会说:

$ rails s
/Users/michael/.rvm/gems/ruby-1.9.2-p318@global/gems/bundler-1.1.3/lib/bundler/resolver.rb:129:in `block in resolve': Bundler could not find compatible versions for gem "bundler": (Bundler::VersionConflict)
  In Gemfile:
    rails (= 3.0.0) ruby depends on
      bundler (~> 1.0.0) ruby

  Current Bundler version:
    bundler (1.1.3)

但我已经用过

gem install rails -v 3.0.0
gem install bundler -v 1.0.0
gem install bundler -v 1.0.2

所以当我gem list,我会看到

bundler (1.1.3, 1.0.22, 1.0.0)
rails (3.0.0)

那么为什么它仍然在抱怨 Rails 3.0.0 需要 bundler 1.0.0 而它不存在呢?如何让项目再次运行?

更新:我的 Gemfile 主要是评论,除了:

source 'http://rubygems.org'

gem 'rails', '3.0.0'      
gem 'sqlite3-ruby', :require => 'sqlite3'

更新 2:如果我运行bundle check

$ bundle check
Your Gemfile's dependencies could not be satisfied
Install missing gems with `bundle install`

$ bundle install
Fetching gem metadata from http://rubygems.org/.........
Bundler could not find compatible versions for gem "bundler":
  In Gemfile:
    rails (= 3.0.0) 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`?
4

3 回答 3

1

问题是您拥有三个版本的捆绑程序(1.1.3、1.0.22、1.0.0)。您的应用程序只需要 1.0.0。当您运行服务器时,它使用 1.1.3。

所以首先通过这个命令卸载两个捆绑器

      gem uninstall bundler -v=1.1.3

      gem uninstall bundler -v=1.0.22

然后运行服务器它肯定会工作......

于 2012-04-17T05:36:56.520 回答
1

您可能需要在 bundler 上下文中运行 rails 和 rake:

bundle exec rails s

Ditt 使用您的 rake 命令,例如,

bundle exec rake -T

这是一个 SO 线程,其中包含指向更深入文章的链接。此外,如果你生气了,很多关于如何绕过它的喋喋不休。就个人而言,无论如何我都给我最常用的命令起了别名,所以我什至没有注意到。

于 2012-04-17T20:48:06.137 回答
1

只需将 Bundler 添加到您的gemfile项目中即可锁定用于该项目的 bundler 版本。

gem 'bundler', '1.1.0'

如果你这样做,你不需要卸载其他版本的 Bundler,你可能会在其他具有不同依赖项的项目上使用它。

您也不需要使用bundle exec任何rails命令,因为 Rails 支持捆绑程序,并且始终在当前捆绑包的上下文中运行。非 Rails 命令需要 `bundle exec'。

于 2012-04-18T12:47:56.413 回答