Ну, прежде всего вы должны обратиться к файлу следующим образом:
file_path = File.join(File.dirname(__FILE__),"yaml/qty.yaml")
units_hash = YAML.load_file(filepath)
File.dirname(__FILE__)
дает вам каталог, в котором находится текущий файл (recipe.rb).File.join
правильно соединяет пути к файлам.Таким образом, вы должны использовать это для ссылки yaml-файла относительно на папку recipe.rb.
Если использование YAML-файла в этом случае является хорошей идеей, это то, что широкообсуждается.Я сам думаю, что это адекватный способ, особенно в начале разработки с ruby.
Допустимой альтернативой yaml-файлам будет rb-File (Ruby Code), в котором вы объявляете константы, которыесодержать ваши данные.Позже вы можете использовать их напрямую.Таким образом, только ruby-интерпретатор должен работать, и вы экономите время на вычислениях для других вещей.(анализатор не требуется)
Однако в обычном сценарии вы также должны позаботиться о том, чтобы чтение в файле YAML могло завершиться неудачно.Таким образом, вы должны быть в состоянии справиться с этим:
file_path = File.join(File.dirname(__FILE__),"yaml/qty.yaml")
begin
units_hash = YAML.load_file(filepath)
rescue Psych::SyntaxError
$stderr.puts "Invalid yaml-file found, at #{file_path}"
exit 1
rescue Errno::EACCES
$stderr.puts "Couldn't access file due to permissions at #{file_path}"
exit 1
rescue Errno::ENOENT
$stderr.puts "Couldn't access non-existent file #{file_path}"
exit 1
end
Или, если вам не нужны подробности:
file_path = File.join(File.dirname(__FILE__),"yaml/qty.yaml")
units_hash =
begin
YAML.load_file(filepath)
rescue Psych::SyntaxError, Errno::EACCES, Errno::ENOENT
{}
end