如何在Rails Rake任务中使用File.open?

Bri*_*rcy 5 rake ruby-on-rails

我需要创建一个定期任务,从外部文本文件创建(或编辑)产品记录.来自irb内部:

>> f = File.open(<filename>) # file in same directory path
Run Code Online (Sandbox Code Playgroud)

没有问题.

但是当粘贴到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
Run Code Online (Sandbox Code Playgroud)

建议?

Col*_*tel 5

如果文件位于Rails根目录中的某个位置,请使用

Rails.root.join('grandparent_dir', 'parent_dir', 'file.txt')
Run Code Online (Sandbox Code Playgroud)

如果该文件不在您的Rails根目录中,则必须为其提供完整路径.