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 [email protected]               #使用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 [email protected]            #使用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安装。

你可能感兴趣的:(rubygems)