当Ruby脚本以Gem开头时,它意味着什么?

时间:2014-07-09 17:37:16

标签: ruby gem require

我正在研究Ruby,我在几个实例中看到了一件事,但是无法理解的是以关键字gem开头的脚本。

Sensu code中可以看到一个例子。

gem "amqp", "1.3.0"

require "amqp"

require File.join(File.dirname(__FILE__), "base")

我理解访问另一个gem的require语句,但确切的 gem“amqp”,“1.3.0”是什么意思?

1 个答案:

答案 0 :(得分:3)

这是gem method that Rubygems adds to Kernel(当前Ruby版本默认需要Rubygems)。它激活特定版本的gem(在这种情况下为amqp gem的版本1.3.0),这意味着gems lib dir(或者gem所指定的任何目录) )已添加到您的LOAD_PATH,以及它所拥有的任何相关宝石的lib目录。

它还检查与任何已激活的宝石没有版本不兼容。

使用时,所有宝石都会被激活。这通常在您致电require时发生。调用gem会激活gem,但不会require来自它的任何文件,因此下面的行require "amqp"(请注意amqp gem gem方法引用的,以及{{1>} 文件,它包含在amqp gem中,是amqp方法正在提及)。

此方法用于确保您使用特定版本的gem,而无需使用Bundler(或类似的东西)。 Bundler还有require中使用的gem方法,但这是一种不同(但相似)的方法。

它还用于指定您想要使用也是标准库一部分的库的gem版本(例如,如果您想使用更新版本)。例如,与Ruby一起分发的Yaml库是Psych,也是available as a gem