Как я загружаю файлы из определенного относительного пути в Ruby?

Я делаю драгоценный камень для внутреннего пользования. В нем я загружаю некоторый 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

но я не уверен, что мне нравится этот подход также.

5
задан maček 19 June 2010 в 15:53
поделиться

1 ответ

Если есть основной файл, который вы всегда запускаете, вы можете использовать этот файл в качестве точки отсчета. Относительный путь (между текущим каталогом и) этого файла будет в $0, поэтому, чтобы получить относительный путь к data/root.yaml (предполагая, что это относительный путь между главным файлом и root.yaml), вы делаете

path_to_root_yaml = File.dirname($0) + '/data/root.yaml'
4
ответ дан 15 December 2019 в 00:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: