2012-04-09 23 views
1

我正在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的地方創建一致的文件結構。

回答

0

我找到了答案,以我自己的問題:

的問題是,我用的是API的rubygems安裝的RubyGems我:

Gem::Installer.new(file_name) 

這創造了搞砸了我的路徑syslinks。還有就是做包裝,而不是syslinks一個選項,這似乎是安裝的標準方式:

Gem::Installer.new(file_name, :wrappers => true) 

現在的包裝被複制到我的寶石的bin目錄並使用正確的路徑。現在我可以擁有一個可以製作成寶石的通用文件。所有的東西在開發和創業中都是一樣的。

快樂結局...