2010-09-10 81 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" 

也有效(您實際上需要「領先的」斜線)。

相關問題