2013年7月24日星期三

RubyGems 与 Bundler

1、RubyGems镜像
由于国内网络原因(你懂的),导致 rubygems.org 存放在 Amazon S3 上面的资源文件间歇性连接失败。所以你会与遇到 gem install rack 或 bundle install 的时候半天没有响应,具体可以用 gem install rails -V 来查看执行过程。
这是一个完整 rubygems.org 镜像,你可以用此代替官方版本,同步频率目前为15分钟一次以保证尽量与官方服务同步。

如何使用?
$ gem sources --remove https://rubygems.org/
$ gem sources -a http://ruby.taobao.org/
$ gem sources -l
*** CURRENT SOURCES ***

http://ruby.taobao.org
# 请确保只有 ruby.taobao.org
$ gem install rails
如果你是用 Bundle (Rails 项目)
source 'http://ruby.taobao.org/'
gem 'rails', '3.2.12'
...

2、RubyGems介绍
RubyGems 是 Ruby 社群最常使用的套件管理系統,如同 Perl 的 CPAN 或 Python 的 EasyInstall / pip,使用者可以很簡易地安裝及管理套件。與其它的套件管理系統一樣,RubyGems 也有版本與相依性管理。
RubyGems 大致可以分為兩個部份。一個是 gem 命令,另一個則是在 runtime 中管理可用的 gems 與其版本。在這篇淺談中,將不會介紹所有的功能與選項,使用者請自行參閱 gem help

安裝

在 Ruby 1.9 之前,RubyGems 需要額外安裝,因為它不是官方的套件。而在 Ruby 1.9 之後,已被收錄至 Ruby 標準發行版中。差別在於收錄的版本可能比較舊。不過沒關係,因為 RubyGems 本身也可以由 RubyGems 散佈,因此只要先取得一份可以執行的 RubyGems,接著要管理都很容易。

01. Mac OS X

在 Mac OS X 中,雖然 Ruby 的版本是 1.8.7,但是 RubyGems 也已經預先裝好了。

02. Linux 發行版

在 Linux 上使用該發行版的套件管理系統即可。如果已是 Ruby 1.9 則不需要再安裝 RubyGems,若是較舊的 Ruby 1.8,通常 Linux 上的套件管理系統也有提供 RubyGems。

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安装。

1 条评论: