2013-07-22 70 views
3

我正在嘗試require我下載並修改的寶石源代碼。 require適用於主文件,但主文件require其他文件(類和模塊),不幸的是,這些類和模塊是從以前安裝的gem(通過gem命令)加載的,而不是本地修改的。需要修改的寶石源代碼

我在做require './lib/foo',想告訴require只加載本地文件嗎?

編輯:我的require './lib/foo'正在工作。 foo是我想要的本地版本。但是foo確實需要其他東西,而這些需要指向已安裝gem的文件(我不想因爲我正在嘗試糾正內部的東西)。

+0

是你的修改通用和匹配,以目前創業板的質量?如果是這樣,除了可以立即使用的答案之外,您可以在github上進行pull請求,然後在發佈更改時正常使用gem。 –

+2

是的,這是計劃。我只是希望能夠在推送我的更改之前在IRB或測試腳本上測試這個gem。 – Hartator

回答

0

最好的方法是將Gemfile添加到您的項目中,並將source設置爲您要自定義的寶石。

+1

我明白了,你能更明確嗎?我實際上在寶石代碼裏面。 – Hartator

+0

在您的Gemfile中,包含以下行:'gem'foo',:path =>'/ home/myDir/foo''。 – JellicleCat

0

在Ruby 2.0中,您可以使用__dir__。所以:

require "#{__dir__}/lib/foo" 

需要當地foo.rb文件,而不是你在不同的目錄有foo.rb

另外,最好不要使用與原始寶石相同的名稱。你應該改變文件名到別的。

+0

其實,我的需求'./lib/foo'正在工作。另一個問題來自foo,它需要其他文件。 – Hartator

+0

這就是奇怪的。 'require'不應該能夠擴展文件名,除非你有一些奇怪的庫工作。 – sawa

+0

你是什麼意思?我有:'lib/foo.rb',其中包含'require foo/module1',但它不會加載本地版本,而是裝載'foo/module1'的gem版本。 – Hartator

1

通過命令卸載原來的寶石從系統

gem uninstall some_gem 

然後去下載的源代碼的根,並命令從修改後的源建立自己的寶石

gem build some_gem.gemspec 

通過指定安裝gem生成的源文件名稱。

gem install some_gem-version 
0

如果您使用捆紮機,你已經分叉在GitHub上或其他在線混帳提供這種寶石,你可以修改你的Gemfile與:git命令(http://bundler.io/v1.3/git.html):

而不是

gem some_gem

你可以做

gem some_gem, :git => 'git://github.com/my_username/my_awesome_fork_of_some_gem.git'

甚至

gem some_gem, :github => 'my_username/my_awesome_fork_of_some_gem'