Gemfile入门介绍
2013-06-13 00:00:00

主要翻译自gemfile manual

Gemfile主要是用来管理ruby程序所依赖的gem,下面逐一介绍主要的配置。

###source

gem的下载源例如

source "https://rubygems.org"
source "http://gems.github.com"
source "http://ruby.taobao.com"

优先级为越靠下的越高,鉴于国内的情况推荐使用第三个大淘宝的源。

###ruby

如果程序需要特定版本的ruby或ruby引擎,就需要指明一下例如

ruby "1.8.7", :engine => "jruby", :engine_version => "1.6.7"

其中engine和engine_version是可选的。

###gem

程序所依赖的gem及其版本组别等等信息,也是参数最复杂的一个关键字,下面将从简单到复杂逐一介绍。

#####name

唯一一个必选项,指明程序需要哪个gem,例如:

gem "nokogiri"

其它选项均为可选项

#####version

制定所需gem版本例如:

gem 'rails', '3.0.0.beta3'
gem 'rack',  '>=1.0'
gem 'thin',  '~>1.1'

‘>=’表示大于当前版本的最新版本。

那么第三个~>1.1是啥意思呢,就是>=1.1且小于2.0的最新版本。~> 2.0.3就是>=2.03且小于2.1的最新版本即控制gem的版本在一个发行区间内。

#####require

如果gem的main file名字和gem 的name不同需要通过require 指定,例如:

gem 'rspec', :require => 'spec'

如果require指定为false表示在程序运行时不会自动require该gem

gem "webmock", :require => false

#####group

有些gem只是开发环境下需要如wirble,有些只是测试环境需要如rspec,而有的是线上系统需要,为了节省空间和时间可以把gem分组,例如

gem "rspec", :group => :test
gem "wirble", :groups => [:development, :test]

这样在bundle install 时可以加入without选项指明不安装那些gem,例如

bundle install --without development test
git,github,path

这几个选项都是用来指定从哪里安装gem通常是一些特殊版本或者特殊的gem,source里没有的。例如

gem 'nokogiri', :git => 'git://github.com/tenderlove/nokogiri.git', :branch => '1.4'
gem 'nokogiri', :path => '~/sw/gems/nokogiri'
gem "rails", :github => "rails/rails"

其中path通常指本地一个路径,git和github可以指定一个git库并通过branch,tag,和ref指定版本库中的一个特定版本。

#####platform

指定平台相关的tem,通常是某个操作系统或某个ruby引擎下的特有gem例如:

gem "weakling",   :platforms => :jruby
gem "ruby-debug", :platforms => :mri_18
gem "nokogiri",   :platforms => [:mri_18, :jruby]

###块控制语句

如group,git,path和path这类语句可以一次控制很多gem,例如:

git "git://github.com/rails/rails.git" do
  gem "activesupport"
  gem "actionpack"
end

platforms :ruby do
  gem "ruby-debug"
  gem "sqlite3"
end

group :development do
  gem "wirble"
  gem "faker"
end