2011-08-12 20 views
89

Selon "Custom Rake Tasks":Quelle est la tâche 'environnement' dans Rake?

desc "Pick a random user as the winner" 
task :winner => :environment do 
    puts "Winner: #{pick(User).name}" 
end 

Pour autant que je sache, le :winner => :environment signifie "faire environment avant winner". Mais qu'est-ce que environment? Quand devrais-je l'utiliser?

J'ai essayé rake -T, mais dans la liste je n'ai pas pu trouver environment.

+0

Découvrez la nouvelle syntaxe http://stackoverflow.com/questions/12493337/rake-aborted-undefined-method-map-for-namesymbol –

Répondre

88

Vous pouvez accéder à vos modèles et, en fait, à votre environnement entier en rendant les tâches dépendantes de la tâche d'environnement. Cela vous permet de faire des choses comme run rake RAILS_ENV=staging db:migrate.

Voir "Custom Rake Tasks".

+3

Où est-il défini dans la source? J'ai trouvé où sont les tâches rake, et j'ai trouvé une définition de tâche vide qui dépend de 'app: environment', mais je ne trouve pas la définition de la tâche app: environment. https://github.com/rails/rails/blob/master/railties/lib/rails/tasks/engine.rake – odigity

+0

@odigity On dirait ici: https://github.com/rails/rails/blob/v4. 2.4/railties/lib/rails/application.rb # L454 –

31

Il charge dans votre environnement Rails afin que vous puissiez réellement utiliser vos modèles et quoi d'autre. Sinon, il n'a aucune idée de ces choses.

Donc, si vous avez effectué une tâche qui vient de faire puts "HI!", vous n'avez pas besoin d'ajouter la tâche :environment aux dépendances. Mais si vous souhaitez faire quelque chose comme User.find(1) bien qui en aura besoin.

22

Y compris => :environment racontera Rake pour charger l'environnement complet de l'application, ce qui donne l'accès à des choses pertinentes tâche comme les classes, les aides, etc. Sans :environment, vous n'aurez pas accès à aucun de ces extras.

En outre, => :environment ne met pas à disposition de variables liées à l'environnement, par ex. environment, @environment, RAILS_ENV, etc.

+0

La méthode du document de tâche est trop simple pour le comprendre. –

Questions connexes