RVM,RubyGems和Bundler的日常使用

  许多Ruby应用都使用RVM+RubyGems+Bundler来管理自身的执行环境,其中包括Ruby的版本管理和软件包(gems)管理,本文使用ruby-1.9.2-p290, Rubygems-1.8.10和bundler-1.0.21简单介绍此三者的简单使用。

 

 

(1)使用RubyGems

  RubyGems是随着Ruby一起安装的,当安装好Ruby之后,RubyGems对应的命令gem便可以使用,gem命令用来安装Ruby世界的第三方软件包,这些软件包被称作gems,类似于Wndows下dll文件或Linux下的so文件,但是一个Gem并不是单个文件,而是具有一定目录结构的文件夹。请注意,“gem”既表示RubyGems的命令,又可表示某个Ruby软件包,为了不至混淆,本文采用"gem"表示RubyGems的命令,而用"Gem"表示一个Ruby软件包。

  例如,安装名为“rake”的软件包:

gem install rake

 

  gem命令将自动从网上下载该软件包,然后进行安装。

  列出已经安装的软件包:

gem list

 

  此外,gem命令还可以用来构建你自己的Gem。

 

(2)使用RVM

  在终端下执行以下命令便可安装rvm:

bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer )

 

  安装完毕后rvm还不能立即使用,须要将以下脚本追加到当前用户主目录下的.bashrc文件。

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"

 

  在Linux下建议使用非root用户安装rvm,这样rvm将被安装在当前用户的主目录下的.rvm 文件夹(隐藏文件夹), 如果需要删除rvm,直接删除该.rvm文件夹即可。

  使用rvm命令列出当前可以安装的ruby版本:

rvm list known

 

  安装某ruby版本(例如ruby-1.9.2-p290):

rvm install ruby-1.9.2-p290

 

  使用某ruby版本:

rvm use ruby-1.8.7-head

 

  如果在该命令之后加上--default选项,将在每次启动终端时默认使用该ruby版本。

  rvm除了可以管理不同的ruby版本外,还可以为每个ruby版本创建不同的Gem集合(gemsets),从而使不同的Ruby应用可以独立使用自己的Gem集合。比如在使用ruby-1.9.2-p290的情况下,我需要建立两个rails工程,一个使用rails-3.0,一个使用rails-3.1.0,我们便可创建两个gemset,并在各个gemset下分别安装对应的rails版本和所需其他Gem:

rvm gemset create rails-3.0            #创建名为rails-3.0的gemset
rvm 1.9.2-p290@rails-3.0               #使用ruby-1.9.2-p290并使用rails-3.0 gemset
gem install rails -v 3.0                    #在rails-3.0 gemset下安装rails的3.0版本
rvm gemset create rails-3.1.0         #创建名为rails-3.1.0的gemset
rvm 1.9.2-p290@rails-3.1.0            #使用ruby-1.9.2-p290并使用rails-3.1.0 gemset 
gem install rails -v 3.1.0                 #在rails-3.0 gemset下安装rails的3.1.0版本

 

  使用以下命令可以列出当前Ruby版本下的所有gemset:

rvm gemset list

 

  在笔者的ubuntu机器下输出如下:

    gemsets for ruby-1.9.2-p290 (found in /home/eudy/.rvm/gems/ruby-1.9.2-p290)

     default
     global
     mass-opinion-rails3.1.0
=> Miss_India_in_Cucumber_Way
     watirmelon-cucumber

 

  第1行表明目前正使用ruby-1.9.2-p290,以下几行每行为一个gemset, “=> ”表明当前正使用的gemset。

 

(3)使用Bundler

  bundler主要用于管理Ruby应用程序的依赖关系,并按照此依赖关系安装所需的Gems。当运行bundle install命令来安装Gems时,bundler会使用当前目录下的名为Gemfile的文件来处理依赖关系。

  以下是一个简单的Gemfile内容:

source "http://rubygems.org"
gem "nokogiri"
gem "rack", "~>1.1"
gem "rspec", :require => "spec"

 

  文件第1行表明bundler会从http://rubygems.org下载Gems;第2行表明需要名为nokogiri的Gem;第3行表明需要名为rack的Gem,并且版本必须高于1.1;第4行表明rspec依赖于spec, 所以spec将先于rspec安装。

posted @ 2012-02-13 20:11  无知者云  阅读(4482)  评论(0编辑  收藏  举报