2016-07-01 43 views
0

我一直在使用作爲gem安裝的Ruby包。現在我想修改代碼,嘗試修復錯誤/添加功能。我可以從GitHub下載該軟件包的源代碼,但是,我不確定接下來要做什麼。如何用本地源代碼目錄中的代碼替換Ruby gem

有沒有一種簡單的方法,我可以使用本地源代碼目錄中的代碼替換特定的gem?理想情況下,這個過程會很簡單,我可以在修改代碼時不斷更新。

此外,此軟件包用作其他寶石的依賴項,理想情況下,使用此寶石的其他軟件包將使用更新後的版本。 (因爲我最終運行的程序來自其他寶石之一。)有沒有辦法在沒有從源代碼安裝其他軟件包的情況下進行安裝?

(這將是在Linux上,如果它使事情變得更容易。)

回答

2

您使用bundler你可以設置你的Gemfile假設。如果你不確定你使用的捆綁器在你的項目的根目錄。應該有一個名爲Gemfile的文件,沒有擴展名。這個文件的存在通常表明項目的作者正在使用捆綁器。下面描述的所有更改應該在該文件中進行。

gem hashmap中的:path:git鍵可用於將rubygems指向不同的位置。當我使用:path時,我將有兩個不同的紅寶石項目。第一個項目是活躍的項目。我目前正在進行的項目。這個項目需要我需要更新的問題寶石。第二個項目將檢出我希望更改的gem的源代碼。通過這兩個項目設置,我可以編輯第一個項目的Gemfile並將其指向第二個項目。這是通過使用:path完成的。

# The Gemfile of the first project 
gem 'the_gem_in_question', :path => '/the/path/to/the/second/project' 
+0

如果您將Gem的版本包含在Gemfile中,那麼在Gemfile和Gem中激活版本會導致Bundler安裝新版本。 – SoAwesomeMan

+0

如何判斷我是否使用捆綁器? - 我幾乎沒有寶石的經驗。我安裝的寶石是用「gem install」自動下載的,所以我對建立寶石一無所知。 (例如,當你說「設置在你的Gemfile中」時,是在下載的源碼目錄中或其他地方?) –

+0

@ R.M我已經更新了答案,以便包含更多細節。請讓我知道,如果你想我擴展其他任何東西。 – Stewart

0

有兩種方法可以修改這些文件並顯示更改。

一個使用Gemfile來定義路徑。例如,如果你想在本地Redis的寶石,你可以git clone [email protected]:redis/redis-rb.git然後斯圖爾特上面指出的,把它放到你的Gemfile此行gem 'redis', :path => './pathtoredis/redis',而不是gem 'redis'

另一種方式,這是快一點,但難以跟蹤變化和東西只需gem open redis在文本編輯器中打開它。

+0

當我嘗試'gem open'時,我得到一個「未知的命令打開」 - 是否有我需要的最低版本的寶石,或需要安裝一些額外的軟件包? –

相關問題