我想我对 ruby 脚本顶部的 require/include 语句正在做什么有一个基本的了解,比如
require 'rspec'
这些陈述很容易谷歌搜索并找到相关结果。但有时我会看到一个 gem 声明,比如
gem 'rspec'
这条线有什么作用?
在 ruby 代码中,gem(gem_name, *requirements)
定义在Kernel
告诉 Ruby 加载特定版本的gem_name
. 当您安装了同一个 gem 的多个版本时,这很有用。
例如,如果你安装了两个版本rspec
,比如说2.12.0
和2.13.0
,你可以调用gem
之前require
使用特定版本。注意gem
应该在require
调用之前。
gem 'rspec', '=2.12.0'
require 'rspec'
无gem 'gem_name'
版本使用您机器上的最新版本,这是不必要的。您可以require
不打电话gem
来获得相同的行为。
此外,在 Bundler::Dsl 中,gem
用于告诉 bundler 准备/安装特定版本的 ruby gems。你会在Gemfile中看到
require
Rubygems 之前的原始行为是在$LOAD_FILES
变量中列出的所有目录中搜索文件,并加载它找到的第一个匹配的目录。如果没有找到匹配的文件,require
将引发LoadError
.
Rubygems 改变了这个过程。使用 Rubygems,require
将像以前一样搜索现有$LOAD_PATH
的,但如果没有找到匹配的文件,那么 Rubygems 将在您的机器上搜索已安装的 gem 以查找匹配项。如果找到包含匹配文件的 gem,则激活该 gem ,然后$LOAD_PATH
重复搜索。激活 gem 的主要作用是将 gemslib
目录添加到您的加载路径中。这样,加载路径的第二次搜索将找到所需的文件。
通常这意味着您已安装的最新版本的 gem 被激活。有时您会想要使用不同版本的 gem,为此您可以使用gem
方法. 该gem
方法激活一个 gem,你可以指定你想要的版本,但不需要任何文件。当您稍后需要所需的文件时,您将从您指定的 gem 版本中获取它们。
在 Ruby 中,gem 是具有开箱即用功能的包(作为其他编程语言中的库)。
您在 Ruby 项目中使用的 gem 可以很容易地使用一个名为“bundler”的工具进行管理,只需在 google 上搜索它。您发布的代码片段是 bundler 用于安装和更新您为项目指定的所有库的规范文件的一部分。
如果您正在开发 Ruby on Rails,则使用 gems 和使用 bundler 管理它们是非常常见的,可以说是最佳实践。
Gems 非常棒,因为有很多有用的库可以扩展默认功能,例如 rails,而且您可以开箱即用!
如需宝石列表,请访问 rubygems.org