2012-01-06 38 views
1

假設具有以下結構Ruby項目...紅寶石:所需的類內管理文件路徑

project/ 
|-- data 
| `-- data.yaml 
|-- lib 
| |-- project 
| | `-- myclass.rb 
| `-- project.rb 

在LIB /項目/ myclass.rb,如圖的例子中我加載數據/ data.yaml下面...

def MyClass 
    data = YAML::load(File.open('../../data/data.yaml')) 
    # Other stuff.. 
end 

在LIB/project.rb,我有項目/ myclass.rb

如果project.rb運行時,下面的錯誤將被拋出...

Errno::ENOENT: No such file or directory - ../../data/data.yaml 

爲了解決這個問題,我有那麼它是相對於根或lib目錄更新myclass.rb使用的文件路徑...

../data/data.yaml 

有沒有更好的處理這個問題的方法?

回答

1

您可以加載數據是這樣的:

filename = File.join File.dirname(__FILE__), '..', '..', 'data', 'data.yaml' 
data = YAML::load File.open filename 

目前你正在做它的方式是一種不好的,因爲它給用戶帶來的當前目錄要求當他遇到你的代碼。

或者,您可以embed the YAML data at the end of your ruby file using the __END__ keyword

+0

謝謝!這工作完美。 – 2012-01-06 06:12:57