2010-09-10 60 views
4

也许我在升级文档中遗漏了这个,但是如果在rails控制台中输出“Rails.root”,我会看到我的应用程序的根路径。但是如果我在自定义Rake任务中引用“Rails.root”,则它是空的。我错过了什么?提前致谢。Rails.root在Rails 3.0中的自定义Rake任务中为空

样品:

namespace :admin do 
    desc "Import some data" 
    task :import => :environment do 
     csv = Rails.root + "/test/data.csv" 
     raise "#{csv} does not exit. Stopping task." if !File.exists?(csv) 

     CSV.foreach(csv, :headers => :first_row) do |row| 
      puts(row['id']) 
     end 
    end 
end 

每次我得到一个例外,因为 “Rails.root” 是 “”。

回答

12

尝试加入

csv = Rails.root.join('test/data.csv') 

方法CSV成为你的文件的Pathname

+0

不......没有工作。我的任务语法是否正确?即“任务:导入=>:环境” – 2010-09-11 06:23:44

+1

是的语法似乎是正确的,可以工作。尝试没有第一/我更新我的答案。因为不好的PathName生成。 – shingara 2010-09-11 08:51:38

+0

工作!谢谢!! – 2010-09-12 00:40:22

1

参考:

Rails.root + "test/data.csv" 

也能发挥作用,它的斜线是螺丝钉的事情了。

"#{Rails.root}/test/data.csv" 

也有效(您实际上需要“领先的”斜线)。