2014-03-05 18 views
29

我爲Sinatra項目安裝了data_mapper。好奇,爲什麼當我做gem install brew,我可以$ which brew並得到它的位置的路徑,不能爲data_mapper?這適用於一些寶石,並不適用於其他寶石。如何檢查是否安裝了寶石?

如何驗證寶石是否正確安裝?將檢查版本確保寶石是否正確下載?

+0

你可以試試這個http://stackoverflow.com/a/32986687/3728916 – ImranNaqvi

回答

33

通用的解決方案

嘗試gem list得到安裝的寶石的名單。

要測試一個特定的寶石,你可以使用-i與正則表達式:gem list -i "^gem_name$"。 (感謝蒂莫在這種技術的意見。)爲OP

如果你不能找到data_mapper

具體的解決方案,這可能是因爲創業板的名字是與預期的不同。

另外,如果您只是在做which brew來查找brew,那麼您沒有找到名爲brew的gem,您正在查找brew可執行文件的位置。改爲嘗試gem which brew

編輯:

如果你正在做which data_mapper尋找data_mapper,你可能不會發現它。 which是一個用於查找unix可執行文件的unix程序,data_mapper可能沒有。

由於您的目標是驗證是否安裝了正確版本的gem,請使用gem list。您可以通過使用gem list data_mapper來限制特定的寶石。

要驗證它的安裝和工作,你必須嘗試require的寶石,然後在你的代碼中使用它。

+0

'gem list'顯示我有data_mapper。 'gem哪個brew'找到可執行文件?它看起來像一個.rb文件 – andy4thehuynh

+1

'gem which somegemname'顯示的路徑(我認爲)當您執行'require'somegemname''時加載的文件。一般來說,寶石沒有像你通過常規unix發現的程序那樣有'可執行文件'。 –

31

如果你要使用的支票在腳本中,這給出了一個更好的輸出(true或false)和相應的退出碼:

gem list -i <gem_name> 

或者添加版本選項:

gem list -i <gem_name> -v version 
+0

'gem list'作爲一個正則表達式的參數來匹配。所以如果你會說'gem list -i zip'這樣的東西,可能會有很多不同的gem可能會匹配(在撰寫本文時,'gem list -r zip | wc -l'返回197)。但是,如果您對zip gem特別感興趣,則應該在正則表達式壓縮文件中說出,例如'gem list -i^zip $'。否則'gem install spain_zip_codes && gem list -i zip' => true,這可能從來不是你想要的。 – Timo

+0

測試確切的名稱使用'-e'像'gem list -ie zip' – artm