rails 3 中新增加了一个Library管理工具 Bundler,它提供了好的工具来管理rails3项目依赖的gems。我们需要通过Gemfile来管理requires.
下面是Gemfile的一般写法:
每个Gemfile至少要依赖于一个以上的源,通过以下的形式进行声明:
source :rubygems
source "http://rubygems.org"
source :rubyforge
source "http://gems.rubyforge.org"
source :gemcutter
source "http://gemcutter.org"
当然的由于众所周知的墙的问题,使用上边的源可能会出现某些问题…我推荐使用淘宝提供的墙内源:
source 'http://ruby.taobao.org'
通过gem关键字来声明所依赖的Gems
gem "nokogiri"
gem "rails", "3.0.0.beta3"
gem "rack", ">=1.0"
gem "thin", "~>1.1"
第一个参数是gem的名字,第二个参数可以指定版本,后边说明符的用法如下
- 首先是类似于 3.0.0.beta3 这样直接指定版本号
- >= 1.0 表示大于1.0版本
- ~> 比较有意思,我们用一个例子来说明 ~> 2.0.3 就相当于 >= 2.0.3 并且 < 2.1. ~> 2.1 表示 >= 2.1 并且 < 3.0. ~> 2.2.beta 将匹配类似与 2.2.beta.12 的版本号。
关于Gems的详细介绍可以参见这里
- Version 2.1.0 — 基版本
- Version 2.2.0 — 引入了一些新特性
- Version 2.2.1 — 修正一些Bugs
- Version 2.2.2 — 精简了代码
- Version 2.3.0 — 更多的新特性
- Version 3.0.0 — 重写了接口. 应用 2.x 的代码可能会出现兼容性问题。
如果 require 的档名不同,可以加上 :require 参数
gem "rspec", :require => "spec"
gem "sqlite3-ruby", "1.2.5", :require => "sqlite3"
gem "gem-release", :require => false
gem "redis", :require => ["redis/connection/hiredis", "redis"]
更神奇的是还可以用 Git 当做来源,甚至可以指定 branch, tag 或 ref,当然了默认的 branch 是 master 啦。
gem "nokogiri", :git => "git://github.com/tenderlove/nokogiri.git", :branch => "1.4" git "git://github.com/wycats/thor.git", :tag => "v0.13.4"
gem "thor"
如果你是一个Gem的开发者,你还可以直接指定本地的gem哦
gem "nokogiri", :path => "~/sw/gems/nokogiri"
最后还要介绍一个比较重要的关键字 Group,可以指定某些Gem在特定的环境下被加载:
gem "wirble", :group => :development
gem "ruby-debug", :group => [:development, :test]
group :test do
gem "rspec"
end
没有指定 Group 的Gems是属于 Default Group 的。 通过 Group 我们可以更方便的执行 Bundle ,比如
$ bundle install --without test development
Group的功能还是很强大的,大多数特性咱也不太会用的说,这里有老外写的某文章,可以看看啦。
直接执行$ bundle
可以列出常用的命令,比如
bundle check # 检查目前缺少哪些Gems
bundle init # 在当前目录生成Gemfile
bundle install # 根据Gemfile安装环境到当前的系统
关于 RubyGems 我觉得没理由不看官方文档的吧,各个方面都特别详细,有时间好好看看.