3

我正在尝试rake在我的 ruby​​ 脚本中使用...(Ruby 1.8.6,JRuby 1.6.5)

使用 rake 下载gem install --remote rake,安装时看起来不错...

Fetching: rake-0.9.2.2.gem (100%)
Successfully installed rake-0.9.2.2
1 gem installed

我有一个简单的 ruby​​ 脚本,它工作正常,但是当我导入rake使用以下任何一个时require,它开始抱怨......

require 'rake'
LoadError: no such file to load -- rake
  or
require '/lib/rake'
LoadError: no such file to load -- lib/rake

经过一番搜索,我发现在解决问题require 'rubygems'之前添加...rake

require 'rubygems'
require 'rake'

尽管它有效,但我有一些问题......

  1. 上的宝石规格rake显示require_pathas lib,那为什么不起作用require '/lib/rake'?我是否误解了 的重要性require_path

  2. 为什么一定要放在require 'rubygems'前面require 'rake'

4

2 回答 2

6

是的,你误解了它的意义。规范中的是该 gem 安装目录的子目录require_paths数组,应该搜索属于该 gem 的文件。

要找出 rake 的真正位置,试试这个:

 $ gem which rake

您会看到它实际上安装在与/lib;完全无关的地方。在我的系统上,它在/var/lib/gems. 一般来说,Ruby gems 存在于它们自己的目录结构中;$:标准 Ruby 包含路径 ( )中的唯一文件就是rubygems它本身,您过去必须明确地使用它require才能使任何实际的 gem 可见。(从 Ruby 1.9 开始,就没有必要了。)

Gems 不仅仅是要加载的库;您可以安装同一个 gem 的多个版本,并一次指定您想要的版本,并执行如果 gem 只是转储到标准 Ruby 包含路径中将不起作用的其他事情。

于 2012-05-02T16:23:13.740 回答
1
  1. gemspecrequire_path中的 告诉 ruby​​ 这个 gem 的文件在 gem 中的位置。它使您能够键入require 'rake',然后 ruby​​ 知道它需要/lib/rake在 gem 安装文件夹中查找。
  2. 在 Ruby 1.8 中,rubygems(负责为您的应用程序提供 gem 的机制)默认不加载,并且默认的 ruby​​ 不知道您系统上的任何 gem。您需要先加载 ruby​​gems,然后才能使用任何其他 gem。Ruby 1.9 不再是这种情况。
于 2012-05-02T16:29:02.033 回答