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

标签 ruby ruby-1.9

我正在制作供内部使用的 gem。在其中,我从另一个目录加载了一些 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

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

最佳答案

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

path_to_root_yaml = File.dirname($0) + '/data/root.yaml'

关于ruby - 如何从 Ruby 中的特定相对路径加载文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3075855/

相关文章:

ruby - 一段时间后,使用slack-ruby-bot gem从Slack机器人获取多个答案

ruby - 如何通过 ruby​​/micel 邮件删除服务器上的特定邮件?

ruby - 通过连接数组合并两个散列

ruby - 为什么这不起作用 : x. map (&:+"A")

ruby - 在 rdoc 中显示继承的方法

python - Ruby 有类似 bpython 的东西吗?

ruby-on-rails - 使用 block 命名和创建实例变量 [Ruby-on-Rails]

ruby - 使用 .delete 删除数组的两个元素

Ruby - UTF-8 文件编码

ruby - 在 Ruby 1.9.3 上使用大括号进行通配