Ruby:管理所需类中的文件路径

时间:2012-01-06 05:15:18

标签: ruby

假设一个具有以下结构的Ruby项目......

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

在lib / project / myclass.rb中,我加载data / data.yaml,如下例所示......

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

在lib / project.rb中,我包含了project / myclass.rb

如果运行project.rb,将抛出以下错误...

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

为了解决这个问题,我必须更新myclass.rb中使用的文件路径,使其相对于root或lib目录...

../data/data.yaml

有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分: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