0

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

4

1 回答 1

0

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

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

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

这解决了这个问题。

更新:

即使我已正确打开/关闭文件流,问题也再次出现。问题可能出在其他地方,但我想不通,所以我决定放弃 yaml_db 并只使用标准的 db/seeds.rb

于 2013-07-01T03:40:57.243 回答