在HOME/path_test/I中:

负载测试.rb:

require 'yaml'
cnf = YAML::load(File.open('config.yml'))
puts cnf['Hello']

配置.yml:

Hello: world!!!

在HOME/path_test/I中时,我得到了预期的结果:

-bash-3.2$ ruby load_test.rb 
world!!!

在家时/(cd..)我明白了

-bash-3.2$ ruby path_test/load_test.rb 
path_test/负载测试.rb:3:in `initialize': No such file or directory - config.yml     (Errno::ENOENT)
    from path_test/负载测试.rb:3:in `open'
    from path_test/负载测试.rb:3:in `<main>'

这是正确的行为,但不是我所希望的:)

有没有办法加载文件.yml文件相对于源文件,而不是相对于当前工作目录??

解决方案(load_Test.rb):

require 'yaml'
fn = File.dirname(File.expand_path(__FILE__)) + '/config.yml'
cnf = YAML::load(File.open(fn))
puts cnf['Hello']

推荐答案

您应该通过以下方式获取当前文件的路径:

cnf = YAML::load_file(File.join(File.dirname(File.expand_path(__FILE__)), 'config.yml'))

EDIT:

自Ruby 2.0以来,您可以简化这一点并使用:

cnf = YAML::load_file(File.join(__dir__, 'config.yml'))

Ruby相关问答推荐

Symfony 2assets资源过滤器异常中的指南针

将块传递给方法传递给Ruby中的另一个方法

Ruby:子字符串到一定长度,也到子字符串中的最后一个空格

Ruby 的 Object#taint 和 Object#trust 方法是什么?

为什么 ruby​​ 在 Windows 上这么慢?

如何使用 Ruby 的邮件 gem 通过 smtp 发送Electron邮件?

将 ruby​​ hash .default 设置为列表

为什么 Ruby 使用 respond_to?而不是 responds_to?

Ruby 中的排序稳定吗?

理解|| Ruby 中 If 条件中的 OR 运算符

Rails - create and create!

在本地文件夹中安装 gem

如何获取从位置 N 到 Ruby 中最后一个字符的子字符串?

Ruby 的所有/最佳列表?

使用 Ruby 将大写字符串转换为标题大小写

Ruby 方法to_sym有什么作用?

我安装了一个 gem,但 require 'gemname' 不起作用.为什么?

Ruby - Array#<< 和 Array#push 之间的区别

判断整数是否在范围内

Ruby 疯狂:类与对象?