假设一个具有以下结构的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
有没有更好的方法来解决这个问题?
答案 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。