Docs header transparent bg

深入

阅读手册以深入了解 Gemfile 中所有可用选项及其使用方法。

Gemfile 手册

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

RubyGems 版本说明符

如果 gem 的主文件与 gem 名称不同,请指定如何要求它。

gem 'rack-cache', :require => 'rack/cache'
gem 'sqlite3'

指定 :require => false 以防止 bundler 要求 gem,但仍安装它并维护依赖项。

gem 'rspec', :require => false
gem 'sqlite3'

为了在你的Gemfile中使用 gems,你需要在你的应用程序中调用Bundler.require

了解更多: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。

了解更多:Git

如果你想直接从文件系统中使用解压缩的 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'

了解更多:Ruby 指令