2012-05-02 130 views
3

使用寶石我試圖用gem install --remote rake用在我的Ruby腳本rake ...(紅寶石1.8.6,JRuby的1.6.5)如何安裝,要求,和紅寶石

下載耙,長相OK安裝...

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

我有一個簡單的Ruby腳本工作正常,但是當我輸入rake使用下列任何require S的,它開始抱怨....

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_pathlib,那麼爲什麼 不是require '/lib/rake'的工作?我誤解了require_path的意義嗎?

  2. 爲什麼要放置require 'rubygems'require 'rake'

回答

5

是的,你是誤會了意義。規範中的require_paths是該寶石安裝目錄的子目錄的數組,應該搜索屬於該寶石的文件。

找出耙真的,試試這個:

$ gem which rake 

你會看到,它實際上是安裝的地方完全無關的/lib;在我的系統中,它在/var/lib/gems之下。一般來說,Ruby寶石生活在他們自己的目錄結構中;標準Ruby包含路徑($:)中唯一的文件是rubygems本身,爲了使任何實際的gem可見,您必須明確指定require。 (從Ruby 1.9開始,這並不是必需的。)

寶石比只加載庫更復雜;你可以安裝同一個gem的多個版本,並且指定你想要的那一個,並且做其他的事情,如果這些gem只是被轉儲到標準的Ruby包含路徑中,那麼這些東西是行不通的。

1
  1. gemspec中的require_path告訴ruby這個寶石的文件位於寶石內。它使您能夠鍵入require 'rake',然後ruby知道它需要在gem安裝文件夾中查找/lib/rake
  2. 在Ruby 1.8中,默認情況下,rubygems(負責使寶石可用於您的應用的機制)並未默認加載,並且默認的ruby不知道系統上有任何gem。您需要在能夠需要任何其他寶石之前加載rubygems。 Ruby 1.9不再這樣了。