代码之家  ›  专栏  ›  技术社区  ›  John Feminella

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

  •  5
  • John Feminella  · 技术社区  · 15 年前

    我在做宝石供内部使用。在其中,我从另一个目录加载一些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 方法,但我认为没有类似的方法。我用的是Ruby1.9。

    现在,我创建了一个特殊的常量,并依赖于它:

    # in lib/magicwand/magicwand.rb
    module MagicWand
      # Project root directory.
      ROOT = File.expand_path("../..", __FILE__)
    end
    

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

    1 回复  |  直到 15 年前
        1
  •  4
  •   Theo    15 年前

    如果您总是运行一个主文件,那么可以使用该文件作为参考点。该文件的相对路径(在当前目录和之间)将位于 $0 ,以便获取 data/root.yaml (假设这是主文件和 root.yaml 你做到了

    path_to_root_yaml = File.dirname($0) + '/data/root.yaml'
    
    推荐文章