我有这个rake任务,它读取一个文件。
desc "Dump with images."
task :dump_with_images => :environment do
yaml_path = Rails.root + 'db/data.yml'
# output: "" -- empty string
puts File.open(yaml_path).read.inspect
[...]
end
end
如果我从任务外部阅读并检查文件,
yaml_path = Rails.root + 'db/data.yml'
puts File.open(yaml_path).read.inspect
desc "Dump with images."
task :dump_with_images => :environment do
它给了我一些数据:
zeromodulus@kosuna:~/projects/recipes$ rake dump_with_images
"\n---\nphotos:\n columns:\n - id\n - created_at\n - updated_at\n - recipe_id\n - image_file_name\
我不明白为什么我可以在任务之外阅读完全相同的文件,但不能在任务中阅读。
当我检查yaml_path时,它们都是相同的,文件中肯定有数据。
答案 0 :(得分:0)
看起来我正在打开一个文件流而不是关闭它,然后再尝试再次打开相同的文件流。
我已将文件读取代码包装在一个块中,
File.read(file_path, "r") do |f|
YAML.load_stream(f)
end
哪个解决了这个问题。
更新
即使我已正确打开/关闭文件流,问题也重新出现了。问题可能在其他地方,但我无法理解,所以我决定放弃yaml_db并使用标准的db / seeds.rb