Как использовать File.open внутри задачи Rails Rake?

#ruby-on-rails #rake

#ruby-on-rails #rake

Вопрос:

Мне нужно создать повторяющуюся задачу, которая создает (или редактирует) записи о продукте из внешнего текстового файла. Изнутри irb:

 >> f = File.open(<filename>) # file in same directory path
  

Проблем нет.

Но при вставке в файл задачи Rake скрипт всегда выдает сообщение «Файл не найден». (Rails 3.1, Ubuntu.)

 namespace :sap do
  desc "uploads data from raw SAP file"
  task :upload => :environment do
     f = File.open("sap_pnlist_20111010a.csv")
     records = f.readlines
     records.each {|row|
     ... etc etc ...
     }
  end
end
  

Предложения?

Комментарии:

1. Либо укажите полный путь, либо используйте Rails.root.join , если файл находится где-то внутри вашего Rails root.

2. Это сделало свое дело. Спасибо, Джордан!

3. Почему бы вам не сделать это ответом?

Ответ №1:

Если файл находится где-то внутри вашего корневого каталога Rails, используйте

 Rails.root.join('grandparent_dir', 'parent_dir', 'file.txt')
  

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