阅读手册以深入了解 Gemfile
中所有可用选项及其使用方法。
Gemfile 至少需要一个 gem 源,以 RubyGems 服务器 URL 的形式提供。通过运行 bundle init
使用默认的 rubygems.org 源生成 Gemfile。如果可以,请使用 https
,以便您的 rubygems.org 服务器连接将通过 SSL 验证。
source 'https://rubygems.org.cn'
# Gems here
如果您想从其他源获取 gem,请确保将额外的源包装在块中。多个全局源行存在安全风险,不应使用,因为它们会导致从意外源安装 gem。
source 'https://rubygems.org.cn'
# Gems here
source 'https://gems.example.com' do
# Gems from the alternative source here
end
某些 gem 源需要用户名和密码。使用 bundle config
为任何需要用户名和密码的源设置用户名和密码。该命令必须在每个将安装 Gemfile 的计算机上运行一次,但这可以防止凭据以纯文本形式存储在版本控制中。
$ bundle config https://gems.example.com/ user:password
对于某些源,例如公司 Gemfury 帐户,将凭据直接包含在 Gemfile 中作为源 URL 的一部分可能更容易。
source "https://user:[email protected]"
源 URL 中的凭据将优先于使用 config
设置的凭据。声明您需要的 gem,包括版本号。使用 RubyGems 支持的依赖项语法指定版本。
gem 'nokogiri'
gem 'rails', '5.0.0'
gem 'rack', '>=1.0'
gem 'thin', '~>1.1'
大多数版本说明符,例如 >= 1.0
,是不言自明的。说明符 ~>
具有特殊含义,最好通过示例说明。~> 2.0.3
等同于 >= 2.0.3
和 < 2.1
。~> 2.1
等同于 >= 2.1
和 < 3.0
。~> 2.2.beta
将匹配预发布版本,例如 2.2.beta.12
。~> 0
等同于 >= 0.0
和 < 1.0
。
如果 gem 的主文件与 gem 名称不同,请指定如何要求它。
gem 'rack-cache', :require => 'rack/cache'
gem 'sqlite3'
指定 :require => false
以防止 bundler 要求 gem,但仍安装它并维护依赖项。
gem 'rspec', :require => false
gem 'sqlite3'
为了在你的Gemfile
中使用 gems,你需要在你的应用程序中调用Bundler.require
。
如果一些 gems 需要从私有 gem 服务器获取,可以为这些 gems 覆盖默认源。对于包含单个 gem 的 gem 服务器,最简单的方法是在该 gem 上使用:source
选项。
gem 'my_gem', '1.0', :source => 'https://gems.example.com'
如果多个 gems 来自同一个服务器,可以使用source
块将它们分组在一起。
source 'https://gems.example.com' do
gem 'my_gem', '1.0'
gem 'another_gem', '1.2.1'
end
gem 服务器的凭据可以在 URL 中指定,也可以使用bundle config
指定,如上所述。Git 仓库也是有效的 gem 源,只要仓库包含一个或多个有效的 gems。使用:tag
、:branch
或:ref
指定要检出的内容。默认值为master
分支。
gem 'nokogiri', :git => 'https://github.com/tenderlove/nokogiri.git', :branch => '1.4'
如果 git 仓库不包含.gemspec
文件,bundler 将创建一个简单的文件,不包含任何依赖项、可执行文件或 C 扩展。这可能适用于简单的 gems,但不适用于其他 gems。如果没有 .gemspec,你可能不应该从 git 中使用 gem。
如果你想直接从文件系统中使用解压缩的 gem,只需将:path
选项设置为包含 gem 文件的路径。
gem 'extracted_library', :path => './vendor/extracted_library'
如果你想直接从文件系统中使用多个本地 gems,可以将全局path
选项设置为包含 gem 文件的路径。这将自动从子目录加载 gemspec 文件。
path 'components' do
gem 'admin_ui'
gem 'public_ui'
end
依赖项可以放置到组中。组可以在安装时被忽略(使用--without
)或一次性全部要求(使用Bundler.require
)。
gem 'wirble', :group => :development
gem 'debugger', :group => [:development, :test]
group :test do
gem 'rspec'
end
你可以在Gemfile
中使用ruby
指定所需的 Ruby 版本。如果Gemfile
在不同的 Ruby 版本上加载,Bundler 将抛出一个异常,并给出解释。
ruby '1.9.3'
这意味着这个应用程序依赖于一个与 1.9.3 兼容的 Ruby VM。如果版本检查不匹配,Bundler 将抛出一个异常。这将确保运行的代码匹配。你可以使用:engine
和:engine_version
选项更具体地指定。
ruby '1.9.3', :engine => 'jruby', :engine_version => '1.6.7'