2013-07-01 6 views
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 

Это дает мне некоторые данные:

[email protected]:~/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

Это должно сработать. См. Https://gist.github.com/tamouse/1f73c79b5e4675e498b7 – tamouse

ответ

0

Похоже, я открывал поток файлов, а не закрывал его, а затем в коде, пытаясь снова открыть тот же поток файлов.

Я завернул код чтения файла в блоке,

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

Который решил проблему.

Update:

Проблема всплыла, хотя я открытия/закрытия файла потоков правильно. Проблема, вероятно, лежит где-то в другом месте, но я не мог понять, поэтому решил отказаться от yaml_db и просто использовать стандартный db/seeds.rb

Смежные вопросы