我正在Ruby中編寫一個IDE,並且當我在命令行上運行該程序時,如何讓所有文件獲得「必需」,以及何時將其安裝爲Rubygem。
我的Rubygem在其中有一個名爲「vr」的可執行文件。我需要讓這個「vr」可執行文件「需要」來自我的項目的所有其他文件。
當我開發時,很容易要求我所有的項目文件。我簡單的「需要」像這樣給他們一個相對路徑:
require_all Dir.glob(File.expand_path(File.dirname(__FILE__)) + "/../bin/**/*.rb")
的require_all創業板將很好地工作。但是,當我將這個程序安裝成rubygem時,我遇到了一個很大的問題。當我的「VR」可執行由RubyGems的安裝,它複製「VR」可執行到一個特殊的目錄:
/home/eric/.rvm/gems/ruby-1.9.3-p125/bin
這個目錄是完全從我的項目的根文件夾分開。所以我的項目的所有文件都不再被「require」語句找到。
的RubyGems使該目錄爲我的寶石的根:
/home/eric/.rvm/gems/ruby-1.9.3-p125/visualruby-0.0.55
我需要能夠「規定」,從該目錄中的所有文件到我的項目。
到目前爲止,我的解決方案是製作第二個名爲「visualruby.rb」的文件,該文件駐留在我的項目的lib文件夾中。它的require_all語句需要所有的項目文件。然後,我只是通過將此代碼添加到我的「VR」的可執行文件的可執行鏈接到它:
base_file = File.dirname(__FILE__) + '/lib/visualruby.rb'
if File.file?(base_file)
require base_file #load from project
else
require 'visualruby.rb' #load from gem
end
有必要檢查是否有一個名爲「visualruby.rb」相對於當前的文件,因爲文件當我正在開發時,它總是會找到已安裝的gem版本的「visualruby.rb」所以當我對文件進行更改時,它沒有任何作用。我必須強制它從我的開發項目中加載版本以進行更改。另外,我的IDE從頭開始創建項目,所以很高興知道這個通用解決方案。我想爲所有項目建立一致的項目文件系統,但我不確定這是可能的。我有一個爲所有項目製作一個名爲「requires.rb」的文件的通用解決方案,但我不認爲它會起作用,因爲每個項目都會將相同的文件名添加到$ LOAD_PATH中。
請幫助我瞭解如何在可開發和製作rubygems的地方創建一致的文件結構。