由于捆绑程序版本冲突,无法激活rails 3.0.1

use*_*583 10 gem ruby-on-rails bundler

所以我跑:

$ gem install rails --version 3.0.1

Successfully installed rails-3.0.1
1 gem installed
Installing ri documentation for rails-3.0.1...
Installing RDoc documentation for rails-3.0.1...
Run Code Online (Sandbox Code Playgroud)

然后我得到错误:

$ rails -v
/usr/local/rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:1637:in `raise_if_conflicts': Unable to activate rails-3.0.1, because bundler-1.1.4 conflicts with bundler (~> 1.0.0) (Gem::LoadError)
from /usr/local/rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:746:in `activate'
from /usr/local/rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems.rb:1232:in `gem'
from /usr/local/rvm/gems/ruby-1.9.3-p125@rails3tutorial/bin/rails:18:in `<main>'
from /usr/local/rvm/gems/ruby-1.9.3-p125@rails3tutorial/bin/ruby_noexec_wrapper:14:in `eval'
from /usr/local/rvm/gems/ruby-1.9.3-p125@rails3tutorial/bin/ruby_noexec_wrapper:14:in `<main>'
Run Code Online (Sandbox Code Playgroud)

Col*_*n R 8

因此Rails 3.0.1需要Bundler v1.0.0- v1.0.22(实际上是任何1.0.x版本,但不包括1.1.0),但是你有一个更新版本的Bundler,它在Rails启动时被加载.您可以卸载Bundler的较新版本(虽然这是处理问题的一种蹩脚方式)或者因为您正在使用RVM,只需为Rails 3.0.1创建一个gemset.

$ rvm gemset create rails_3.0.1
$ rvm gemset use rails_3.0.1
$ gem install rails -v 3.0.1
$ rails -v
3.0.1
Run Code Online (Sandbox Code Playgroud)

注意:这要求Bundler不在global您尝试使用的Ruby版本的gemset中.如果globalgemset包含的Bundler版本等于或高于1.1.0,那么您将获得与以前相同的错误.

更新:关于~>和RubyGems版本控制的一点解释可能很方便.RubyGems文档中关于悲观版本约束部分在覆盖所有内容方面做得非常出色.


ipd*_*ipd 3

您可能需要更新到捆绑程序 1.1.4。

gem update bundler

应该可以解决问题。

  • 这里的问题不是因为捆绑器已经过时,而是因为太新了。`~&gt; 1.0.0` 表示从 `1.0.0` 到(但不包括)`1.1.0` 的任何版本。 (2认同)