ruby gem声明 - 它做了什么?

时间:2013-04-10 05:23:50

标签: ruby gem

我想我对ruby脚本顶部的require / include语句有基本的了解,比如

require 'rspec'

这些陈述很容易google并找到相关结果。但有时我见过像

这样的宝石声明
gem 'rspec'

这条线做什么?

3 个答案:

答案 0 :(得分:6)

在ruby代码中,gem(gem_name, *requirements)中定义的Kernel告诉Ruby加载特定版本的gem_name。当你安装了同一个gem的多个版本时,这很有用。

例如,如果您安装了rspec的两个版本,例如2.12.02.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

中看到

答案 1 :(得分:4)

在Rubygems之前,require的原始行为是搜索文件的$LOAD_FILES变量中列出的所有目录,并加载它找到匹配的第一个目录。如果未找到匹配的文件,require将引发LoadError

Rubygems改变了这个过程。使用Rubygems,require将像以前一样搜索现有的$LOAD_PATH,但如果找不到匹配的文件,则Rubygems将搜索计算机上已安装的gem以进行匹配。如果找到包含匹配文件的gem,则该gem将激活,然后重复$LOAD_PATH搜索。激活gem的主要作用是将gems lib目录添加到加载路径中。通过这种方式,第二次加载路径搜索将找到所需的文件。

通常这意味着您安装的最新版本的gem会被激活。有时你会想要使用不同版本的gem,为此你可以使用gem methodgem方法激活gem,您可以指定所需的版本,但不需要任何文件。当您以后需要所需的文件时,您将从您指定的gem版本中获取它们。

答案 2 :(得分:-1)

在Ruby中,gem是具有开箱即用功能的包(作为其他编程语言中的库)。

您使用Ruby项目的宝石可以通过名为“bundler”的工具轻松管理,只需谷歌即可。您发布的代码片段是specler文件的一部分,bundler用它来安装和更新您为项目指定的所有库。

如果您正在开发Ruby on Rails,使用gem,使用bundler管理它们是非常常见的,所以说最佳实践。

宝石很棒,因为有很多有用的库可以扩展默认功能,例如rails,你可以开箱即用!

有关宝石的列表,请访问rubygems.org