2010-11-20 59 views
11

我在Snow Leopard上手動構建了Ruby 1.9.2。現在我找不到我的舊GEM文件。我猜他們現在或者是在一條不同的路上。所以我有三個問題:當Ruby在Mac OS X 10.6.8中手動編譯時,GEM在哪裏?

  • 什麼是「老」寶石路徑,其中gem install sinatra把sinatra寶石?
  • 什麼是「新」寶石路徑,這是我手動建立Ruby時設置的?
  • 我該如何改變它,讓Ruby再次找到我的寶石?

回答

3

我相信標準的寶石在OS X上安裝路徑是:

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/ 
+0

好的,我該如何遷移這些寶石或告訴Ruby使用舊的路徑? – MrB 2010-11-20 13:52:34

+0

其實他們在三個地方。查看我對默認值的回覆。 – 2010-11-20 16:49:11

+0

@MrB 1.8以下的許多寶石應該重新安裝在1.9以下。 – Phrogz 2010-11-20 22:04:00

32

打字gem env(使用舊的紅寶石安裝的gem命令)在命令提示符處得到類似的東西:

> RubyGems Environment: 
> - RUBYGEMS VERSION: 1.3.6 
> - RUBY VERSION: 1.9.1 (2009-07-16 patchlevel 243) [i386-mingw32] 
> - INSTALLATION DIRECTORY: C:/Ruby19/lib/ruby/gems/1.9.1 
> - RUBY EXECUTABLE: C:/Ruby19/bin/ruby.exe 
> - EXECUTABLE DIRECTORY: C:/Ruby19/bin 
> - RUBYGEMS PLATFORMS: 
>  - ruby 
>  - x86-mingw32 
> - GEM PATHS: 
>  - C:/Ruby19/lib/ruby/gems/1.9.1 
>  - C:/Users/Username/.gem/ruby/1.9.1 
> - GEM CONFIGURATION: 
>  - :update_sources => true 
>  - :verbose => true 
>  - :benchmark => false 
>  - :backtrace => false 
>  - :bulk_threshold => 1000 
> - REMOTE SOURCES: 
>  - http://rubygems.org/ 

(在Windows上...我想象雪豹會有類似的格式)

GEM PATHS字段是int在這裏消遣的東西。如果您轉至列出的這些目錄,則應該看到名爲緩存的文件夾。這將包含與該特定目錄中所有安裝的gem相對應的.gem文件列表。您應該可以在每個這些gem文件上使用gem install *gemname*(使用您的新的 Ruby安裝的gem命令)。

編輯:錯誤地提到安裝目錄而不是GEM PATHS。 Greg提醒我,Rubygems的特定安裝有多個位置。所有這些位置都需要檢查Ruby安裝所使用的寶石。

+0

從本地.gem文件安裝時,我不確定Rubygem的依賴性行爲。您可能需要包含--ignore-dependencies標誌以避免從遠程源拉取依賴關係(因爲大概您本地已經擁有所有必需的依賴關係)。 – 2010-11-20 14:12:46

+1

Windows Gem配置與Snow Leopard不同,因爲Apple配置默認位置,並希望自己的寶石,加上用戶寶石,以及用戶'sudo'寶石。微軟不包括Ruby,因此它是確定位置的Windows的Ruby安裝程序。 – 2010-11-20 16:51:26

+0

@Greg:無論誰決定安裝位置,Rubygems都不知道該位置在哪裏?如果我在我的知識領域之外,道歉;我認爲Rubygems可以在所有支持的操作系統上工作。 – 2010-11-20 18:31:41

7

您的「舊」寶石將與Mac捆綁在一起的Ruby相關,因爲gem命令包含在Snow Leopard中的Ruby 1.8.7中。如果您which ruby顯示/usr/bin/ruby,你的寶石的環境應該是類似於:

- GEM PATHS: 
    - /Library/Ruby/Gems/1.8 
    - /Users/greg/.gem/ruby/1.8 
    - /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8 

如果您正在使用RVM你可能能夠將其從system寶石告訴copy your gems一個RVM的控制之下。我沒有試過這樣做,因爲我立即安裝了RVM,讓它處理我所有的Ruby安裝,然後忽略系統的安裝。

如果您的which ruby顯示爲/usr/local/bin/ruby那麼gem env命令應反映從源代碼編譯的版本的已更改路徑。

我很好奇,爲什麼手動將它建立,當RVM可用來處理所有的configuration and installation,並在很大程度上刪除有關其中事情,以及是否你剛剛踩在系統安裝的版本有任何疑問。

當RVM安裝了一個Ruby版本時,它將全部位於~/.rvm,您的Gems也將在那裏很好地定位。相對於每個Ruby版本,您可以將manage the gems設爲gemsets,並立即切換。或者,更好的是,您可以在安裝的每個Ruby版本中運行一個命令/程序,以使用rvm ruby 'some command'進行測試。

請注意,在上面的gem env輸出中,寶石位於磁盤上的三個獨立區域。在RVM的控制他們在RVM的沙箱:

- GEM PATHS: 
    - /Users/greg/.rvm/gems/ruby-1.9.2-p0 
    - /Users/greg/.rvm/gems/[email protected] 

這使得它瑣碎,我給他們備份,或打擊他們離開,如果我想。

我曾經在我的Mac和Linux機器上從源代碼編譯我的紅寶石。我現在使用RVM。它比手工完成要好得多。