为什么“捆绑安装”尝试安装过时版本的宝石?

时间:2013-08-12 19:14:43

标签: ruby-on-rails ruby gem rvm bundle

我有不同的宝石

> rvm gemset list
gemsets for ruby-2.0.0-p247 (found in /Users/kai/.rvm/gems/ruby-2.0.0-p247)
=> (default)
   global
   rails4

> rvm gemset use rails4
Using ruby-2.0.0-p247 with gemset rails4

> rails -v
/Users/kai/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/site_ruby/2.0.0/rubygems/dependency.rb:296:in `to_specs': Could not find 'railties' (>= 0) among 43 total gem(s) (Gem::LoadError)
    from /Users/kai/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/site_ruby/2.0.0/rubygems/dependency.rb:307:in `to_spec'
    from /Users/kai/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_gem.rb:47:in `gem'
    from /usr/bin/rails:22:in `<main>'
    from /Users/kai/.rvm/gems/ruby-2.0.0-p247@rails4/bin/ruby_noexec_wrapper:14:in `eval'
    from /Users/kai/.rvm/gems/ruby-2.0.0-p247@rails4/bin/ruby_noexec_wrapper:14:in `<main>'

当我在做的时候:

> bundle install
Fetching gem metadata from https://rubygems.org/.........
Fetching gem metadata from https://rubygems.org/..
Using rake (10.1.0) 
Installing i18n (0.6.4) 
Installing multi_json (1.7.9) 
Installing activesupport (3.2.7) 
Installing builder (3.0.4) 
Installing activemodel (3.2.7) 
Installing erubis (2.7.0) 
Installing journey (1.0.4) 
Installing rack (1.4.5) 
Installing rack-cache (1.2) 
Installing rack-test (0.6.2) 
Installing hike (1.2.3) 
Installing tilt (1.4.1) 
Installing sprockets (2.1.3) 
Installing actionpack (3.2.7) 
Installing mime-types (1.23) 
Installing polyglot (0.3.3) 
Installing treetop (1.4.14) 
Installing mail (2.4.4) 
Installing actionmailer (3.2.7) 
Installing arel (3.0.2) 
Installing tzinfo (0.3.37) 
Installing activerecord (3.2.7) 
Installing activeresource (3.2.7) 
Installing coffee-script-source (1.6.3) 
Installing execjs (1.4.0) 
Installing coffee-script (2.2.0) 
Installing rack-ssl (1.3.3) 
Installing json (1.8.0) 
Installing rdoc (3.12.2) 
Installing thor (0.18.1) 
Installing railties (3.2.7) 
Installing coffee-rails (3.2.2) 
Installing jquery-rails (3.0.4) 
Using bundler (1.3.5) 
Installing rails (3.2.7) 
Installing sass (3.2.10) 
Installing sass-rails (3.2.6) 
Installing sqlite3 (1.3.7) 
Installing uglifier (2.1.2) 
Your bundle is complete!
Use `bundle show [gemname]` to see where a bundled gem is installed.
Post-install message from rdoc:
Depending on your version of ruby, you may need to install ruby rdoc/ri data:

<= 1.8.6 : unsupported
 = 1.8.7 : gem install rdoc-data; rdoc-data --install
 = 1.9.1 : gem install rdoc-data; rdoc-data --install
>= 1.9.2 : nothing to do! Yay!

但我有红宝石2.0!为什么它不安装rails 4.0和activesupport 4.0?

2 个答案:

答案 0 :(得分:2)

bundler根据两个文件安装宝石:

  1. Gemfile.lock在以前的安装过程中保存的严格版本
  2. Gemfile来自用户的宽松版本声明。
  3. 当您生成rails项目时,首先使用以下内容生成Gemfile

    gem 'rails', '~> 3.2'
    

    生成文件后bundle install运行生成Gemfile.lock,其中记录了严格的gems版本,从现在开始,对bundle install的任何后续调用都将仅安装保存的版本Gemfile.lock

    将宝石更新为较新版本:

    1. 检查Gemfile是否有任何版本限制 - 可能会阻止安装您想要的版本
    2. 运行bundle update <gem_name>仅更新此单个gem及其所需内容 - 但将更改范围最小化为​​尽可能小的更改。
    3. 运行bundle update将所有宝石更新为Gemfile
    4. 中允许的最新版本

答案 1 :(得分:0)

除非您遗漏了Gemfile中的版本,否则

bundle install或简称bundle不会安装最新的gem。 e.g。

gem 'rails'

但通常情况并非如此,我们指定的版本可以防止应用程序出现&#34;崩溃&#34;当一些宝石更新并且我们在不知不觉中运行bundle update时,或者就此而言移动应用程序来说测试或生产服务器。通常在向Gemfile添加gem时,我们会这样做:

gem 'rails', '~> 3.2.7'

请注意版本号中的前导~>。这表示:在版本3.2.7和小于3.3.0之间使用rails gem。

要使您的bundle命令获取rails 4.0,您需要更改该行以读取以下任一项:

gem 'rails', '>= 3.2.7' 

gem 'rails', '4.0.0'

如果您使用gem 'rails', '>= 3.2.7',那么您的rails应用程序将使用您系统中可用的最新gem。请注意3.2.7只是我在这里使用的一个例子。如果您使用gem 'rails', '4.0.0',那么您的rails应用程序将使用rails版本4.0.0。

请注意,此更改可能会破坏您现有的rails 3.2应用程序。