定义
Gemfile用来描述Ruby程序执行需要的依赖库。
格式
Gemfile的基本格式为:
source 'https://rubygems.org'
gem 'example', '1.2.3'
gem 'other-example', '~> 1.2'
gem源
全局gem源
Gemfile要求至少配置一个gem源。通过bundle init命令可以创建一个以rubygems.org为gem源的Gemfile,如:
source 'https://rubygems.org'
# 这里添加gems
如果部分gem来自非rubygems.org得gem源,需要额外配置gem源,如:
source 'https://rubygems.org'
# 这里添加gems
source 'https://other.gemsource.org' do
# 这里添加其他gems
end
不过,并不推荐配置多个gem源,这往往会导致安全隐患,因为一些gem可能会从我们并非期望的源下载。
如果一些gem源需要账户名和密码的话,可以通过bundle config命令来配置,如:
bundle config https://other.gemsource.org username:password
我们也可以在指定gem源的时候,加上账户名和密码,如:
source 'https://username:password@gemsource.org'
gem源URL中配置的账号名和密码优先级会高于
bundle config命令。
可以在声明gem的时候,通过source选项指定下载的gem源,如:
gem 'example', '1.0', :source => 'https://gemsource.org'
Github gem源
也可以指定从具体的git repo来下载gem,如:
gem 'example', :git => 'https://github.com/username/gem.git', :branch => '1.4'
本地gem源
gem 'example', :path => './vender/example'
或者
path 'components' do
gem 'admin_ui'
gem 'public_ui'
end
gem分组
当不设置gem的:group参数的时候,gem会被放入:default分组里。
gem 'wireable', :group => :development
gem 'debugger', :group => [:development, :test]
group :test do
gem 'rspec'
end
版本设置
gem 'example'
gem 'example', '1.2.0'
gem 'example', '>= 1.2.0'
gem 'example', '~> 1.2.0' # 等于 '>= 1.2.0', '< 1.3'
gem 'example', '~> 1.2', '>= 1.2.5'
gem 'example', '~> 2', '!= 2.2.1' #排除2.2.1版本
gem 'example', '~> 0' # 等于 '>= 0.0', '< 1.0'
gem 'example', '~> 2.2.beta' # 会匹配pre-release版本,如2.2.beta.12
Ruby版本
我们可以在Gemfile里指定程序需要执行的ruby版本,如:
ruby '1.9.3' # 如果Gemfile在非1.9.3的ruby实现上加载,Bundler会抛异常
ruby '1.9.3', :engine => 'jruby', :engine_version => '1.6.7'
# 我们可以通过:engine, :engine_version指定程序要执行的Ruby实现和具体的版本