5
我正在製作一個內部使用的寶石。在這裏面,我從另一個目錄加載一些YAML:如何從Ruby中的特定相對路徑加載文件?
# in <project_root>/bin/magicwand
MagicWand::Configuration::Initializer.new(...)
# in <project_root>/lib/magicwand/configuration/initializer.rb
root_yaml = YAML.load_file(
File.expand_path("../../../../data/#{RootFileName}", __FILE__))
# in <project_root>/data/root.yaml
---
apple: 100
banana: 200
coconut: 300
我寧願不依賴於data/root.yaml
相對的位置initializer.rb
。相反,我寧願得到<project_root>
的參考,並依賴於從那裏的相對路徑,這似乎是一個更聰明的舉措。
首先,這是最好的方式嗎?其次,如果是這樣,我該怎麼做?我檢查了各種File
方法,但我不認爲有這樣的事情。我使用Ruby 1.9。
現在,我創建了一個特殊的常數,取決於代替:
# in lib/magicwand/magicwand.rb
module MagicWand
# Project root directory.
ROOT = File.expand_path("../..", __FILE__)
end
,但我不知道我喜歡這種方法無論是。
這是一個好主意,但它會在測試期間中斷,當我經常直接對這些類進行單元測試而不是啓動完整的應用程序堆棧。在這種情況下,我的'$ 0'會有所不同(通往測試運行者的路徑,而不是我的應用程序)。 – 2010-06-19 14:53:49
將查找包裝在一個簡單的對象中,您可以在測試期間將其取出。 – Theo 2010-06-19 21:35:37