如何从Ruby中的特定相对路径加载文件?

时间:2010-06-19 14:42:04

标签: ruby ruby-1.9

我正在制作内部使用的宝石。在其中,我从另一个目录加载一些YAML:

# 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

但我不确定我是否喜欢这种方法。

1 个答案:

答案 0 :(得分:4)

如果您始终运行主文件,则可以将该文件用作参考点。该文件的相对路径(当前目录和之间)将在$0中,因此要获取data/root.yaml的相对路径(假设这是主文件和{{1}之间的相对路径你执行

root.yaml