gem和require之间的区别(需要open-uri)

时间:2011-12-03 10:06:54

标签: ruby gemfile

我只是想了解自己。

我正在使用nokogiri gem(用于解析HTML)。如果我正确地打开URL,我需要使用gem'open-uri'中的方法。

但是当我将它包含在我的Gemfile中时(在Windows开发人员的机器上):

gem 'open-uri' - 捆绑安装时出现错误,无法找到gem。

所以如果我使用require 'open-uri' - 它的工作。

那么有人可以解释发生了什么吗?

2 个答案:

答案 0 :(得分:53)

您正在使用bundler作为您的宝石依赖,并且您正确地执行它,但OpenUri是Ruby标准库的一部分。这就是为什么只有 需要在你的代码中使用它时才需要它。

答案 1 :(得分:9)

require用于加载另一个文件并执行其所有语句。这用于导入文件中的所有类和方法定义。 require还会跟踪之前需要的文件,因此不会执行两次。

RubyGem是一个软件包,通常称为“gem”。 Gems包含一个打包的Ruby应用程序或库。 RubyGems软件本身允许您轻松下载,安装和操作系统上的宝石。   - What is a Gem?

然后bundler使用Gemfile来安装指定的gem。

open-uri不是gem,而是Ruby Standard Library的一部分,因此只需要它。