无法从rake任务中读取文件

时间:2013-07-01 03:13:17

标签: ruby-on-rails ruby rake

我有这个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时,它们都是相同的,文件中肯定有数据。

1 个答案:

答案 0 :(得分:0)

看起来我正在打开一个文件流而不是关闭它,然后再尝试再次打开相同的文件流。

我已将文件读取代码包装在一个块中,

File.read(file_path, "r") do |f|
  YAML.load_stream(f)
end

哪个解决了这个问题。

更新

即使我已正确打开/关闭文件流,问题也重新出现了。问题可能在其他地方,但我无法理解,所以我决定放弃yaml_db并使用标准的db / seeds.rb