2010-09-10 7 views
4

Peut-être que j'ai manqué dans la documentation de mise à niveau, mais si je publie "Rails.root" dans la console rails, je vois le chemin racine de mon application. Mais si je référence "Rails.root" dans une tâche Rake personnalisée, elle est vide. Qu'est-ce que je rate? Merci d'avance.Rails.root est vide dans Rake Task personnalisé dans Rails 3.0

Exemple:

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 

je reçois une exception à chaque fois parce que "Rails.root" est "".

Répondre

12

Essayez avec méthode de jointure

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

csv devenir Pathname de votre dossier.

+0

Non ... cela n'a pas fonctionné. La syntaxe de ma tâche est-elle correcte? c'est-à-dire "tâche: import =>: environnement" –

+1

oui la syntaxe semble correcte et peut fonctionner. Essayez sans d'abord/je mets à jour ma réponse avec. Parce que le mauvais PathName génère. – shingara

+0

Cela a fonctionné! Merci!! –

1

Pour référence:

Rails.root + "test/data.csv" 

fonctionnera aussi bien, il est le premier slash que les choses de vis vers le haut.

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

fonctionne également (vous avez réellement besoin de la barre oblique "leader" ici).