目录
Gemfile
– 一种描述Ruby程序的gem依赖关系的格式文件。
1.Global Sources(全局源)
source "https://rubygems.org" #声明全局获取gem的源服务器地址
2.Ruby版本(必填)
您的应用程序需要的Ruby版本。
ruby "1.9.3"
3.Gem行
如果声明了gem行,名称必须填写,否则不要声明。
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
相同。
4.Groups(分组)
有时您会遇到几组只在特定环境中才有意义的gem。例如,您可以使用SQLite(在早期阶段)开发应用程序,但可以使用mysql2
或pg
来部署它。在此示例中,您的开发计算机上可能未安装MySQL或Postgres,并且希望bundler程序跳过它。为此,您可以对依赖项进行分组:
source 'https://rubygems.org'
gem 'rails', '3.2.2'
gem 'rack-cache', require: 'rack/cache'
gem 'nokogiri', '~> 1.4.2'
group :development do
gem 'sqlite3'
end
group :production do
gem 'pg'
end
现在,在开发中,您可以指示bundler程序跳过该production
组:
$ bundle install --without production
Bundler会记得您使用安装了gems --without production
。对于好奇的读者,bundler程序将标记存储在 APP_ROOT/.bundle/config
中。您可以通过运行查看bundler程序在其中保存的所有设置,这些设置bundle config
还将打印出全局设置(存储在中~/.bundle/config
)和通过环境变量设置的设置。
如果bundle install
稍后运行时没有任何标志,bundler程序将记住您上次调用的位置,bundle install --without production
并再次使用该标志。当您使用时require 'bundler/setup'
,捆绑软件将忽略这些组中的gem。
5.Platforms(平台)
如果gem仅应在特定平台或一组平台中使用,则可以指定它们。平台本质上与组相同,不同之处在于,您不需要使用--without
install-time标志来排除其他平台上的gem组。
有许多Gemfile
平台:
ruby
C Ruby(MRI)Rubinius或TruffleRuby,但不是Windows
mri
与ruby相同,但仅CRuby(MRI)
mingw
Windows 32位’mingw32’平台(aka RubyInstaller)
x64_mingw
Windows 64位’mingw32’平台(aka RubyInstaller x64)
rbx
Rubinius
jruby
JRuby
truffleruby
TruffleRuby
mswin
Windows
您还可以通过平台和版本适用于所有平台限制,除了为 rbx
,jruby
,truffleruby
和mswin
。
要指定平台以外的版本,请在平台上附加不带分隔符的版本号。例如,要指定gem只应在具有Ruby 2.3的平台上使用,请使用:
ruby_23
平台和支持的版本的完整列表包括:
ruby
1.8、1.9、2.0、2.1、2.2、2.3、2.4、2.5、2.6
mri
1.8、1.9、2.0、2.1、2.2、2.3、2.4、2.5、2.6
mingw
1.8、1.9、2.0、2.1、2.2、2.3、2.4、2.5、2.6
x64_mingw
2.0、2.1、2.2、2.3、2.4、2.5、2.6
与组一样,您可以指定一个或多个平台:
gem "weakling", :platforms => :jruby
gem "ruby-debug", :platforms => :mri_18
gem "nokogiri", :platforms => [:mri_18, :jruby]
所有涉及组操作(bundle install
,Bundler.setup
, Bundler.require
)的行为完全一样的,如果不符合当前平台的任何组分别明确排除。
6.Source(专有源)
您可以使用’:source’选项为gem选择备用的Rubygems存储库。
gem "some_internal_gem", :source => "https://gems.example.com"
这将强制从此源加载gem,并忽略在文件顶层声明的所有全局源。如果该源文件中不存在gem,则将不会安装它。
7.Git源
可以通过git_source
方法定义自定义git源。提供源名称作为参数,并提供一个接收单个参数并将其内插到字符串中以返回完整仓库地址的块:
git_source(:stash){ |repo_name| "https://stash.corp.acme.pl/#{repo_name}.git" }
gem 'rails', :stash => 'forks/rails'
另外,如果您想选择一个特定的分支:
gem "rails", :stash => "forks/rails", :branch => "branch_name"
8.源优先级
Bundler程序使用以下源优先级顺序:
- 所述gem的专有源(使用
:source
,:path
或:git
) - 对于隐式gem(显式gem的依赖项),在父级上声明的任何源,git或路径存储库。这导致bundler处理来自Rails git存储库的ActiveSupport gem优先于来自
rubygems.org
。 - 通过
global source
行指定的源,Gemfile
搜索您的每个来源。
原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/ruby/rubyenv/1827.html