那么首先你应该参考该文件在以下方式:
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文件是一个好主意,这是一个广泛讨论的问题。我自己认为,这是一个适当的方式,特别是在用红宝石开发的时候。
yaml-files的一个有效替代方案是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
谢谢。说实话,我这样做的唯一原因是因为我刚刚读完的这本书表明这是最佳实践(代码中没有神奇数字,非程序员可编辑等),但我确实遵循了你的观点,并会可能会在某些时候改变这一点。 – 2011-12-20 09:38:57