如何在红宝石中安装,要求和使用宝石

时间:2012-05-02 16:09:52

标签: ruby gem jruby

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

使用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上的gem规范将require_path显示为lib,为什么 require '/lib/rake'没有工作?我误解了require_path的重要性吗?

  2. 为什么有必要在require 'rubygems'之前放置require 'rake'

2 个答案:

答案 0 :(得分:5)

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

要了解rake的确切位置,请尝试以下方法:

 $ gem which rake

你会发现它实际安装在与/lib完全无关的地方;在我的系统上,它位于/var/lib/gems之下。通常,Ruby gem存在于它们自己的目录结构中;标准Ruby包含路径($:)中唯一的文件是rubygems本身,您以前必须明确require才能使任何实际的宝石可见。 (自Ruby 1.9以来,没有必要。)

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

答案 1 :(得分:1)

  1. gemspec中的require_path告诉ruby这个gem的文件位于gem中。它使您能够键入require 'rake',然后ruby知道它需要在gem安装文件夹中查找/lib/rake
  2. 在Ruby 1.8中,默认情况下不会加载rubygems(负责为您的应用程序提供宝石的机制),并且默认的ruby不知道您的系统上有任何gem。您需要在能够需要任何其他gem之前加载rubygems。 Ruby 1.9不再是这种情况了。