2016-04-29 27 views
1

我是新來的紅寶石,並試圖寫一個紅寶石git鉤。我想在腳本中使用堅固的寶石。作爲GitLab安裝(Files List)的一部分,該寶石已在/opt/gitlab/embedded/service/gem/ruby/2.1.0/中提供。我如何在我的腳本中需要這個寶石?如何從特定位置需要紅寶石?

我試過$LOAD_PATH.unshift "/opt/gitlab/embedded/service/gem/ruby/2.1.0/",然後require "rugged",如another stackoverflow answer所述,但它沒有奏效。

+0

你在使用[Bundler](http://bundler.io)嗎?通常它會爲你處理這些東西。 – tadman

+0

我正在使用其他所需寶石的捆綁軟件。但是安裝'堅固的'寶石需要安裝'gcc'和'cmake'。所以我想從現有的安裝位置加載它。 –

+0

如果它編譯了擴展名,你必須在該機器上編譯它。將二進制文件扔到任意機器上是非常危險的,它們通常被鎖定到特定版本的系統庫。在那裏獲得'gcc'等應該不難,對吧?如果您在操作加載路徑,則必須包含該寶石的父目錄,而不僅限於所有寶石的位置。 – tadman

回答

1

仔細研究如何在包含gem後爲其配置$LOAD_PATH。通常情況下,它是基地gemname.rb所在位置的完整路徑,就像您的情況rugged.rb一樣。

$LOAD_PATH的工作方式是掃描該列表尋找rugged.rb,如果找不到,則轉到下一個可能的位置。你正在指定一個沒有的目錄,所以找到正確的路徑並填入它,你應該很好。

+0

謝謝。我使用了'$ LOAD_PATH.unshift「/opt/gitlab/embedded/service/gem/ruby/2.1.0/gems/rugged-0.24.0/lib/」',它工作。 –

+1

大致就是這樣,但請記住,這通常比使用Bundler更麻煩。我想到你可能有辦法使用Bundler':path'選項更乾淨地完成此操作:'gem'rugged',路徑:'/opt/gitlab/embedded/service/gem/ruby/2.1.0/gems/rugged-0.24.0 /''不幸的是,這使得你的'Gemfile'鎖定在一臺特定的機器上,這通常是一件壞事。 – tadman

+0

謝謝@tadman。我也會嘗試。 –