72 votes

Où sont définies les tâches de rake?

Sur un fraîchement créé Rails de projet (généré par rails someName), on peut courir certains "par défaut" râteau tâches comme:

  • rake test
  • rake db:migrate
  • etc

La Question est, où est-ce que ces tâches soient décrites? La valeur par défaut Rakefile ne disposent pas de toutes ces tâches.

En outre, j'ai vérifié certains projet qui utilise rspec et je suis en mesure d'exécuter rake spec pour exécuter tous les tests. D'où vient l' spec cible définie?

116voto

user2245369 Points 368

Si par description vous entendez défini, rake -W est votre ami. Exemple:

 $ rake -W db:create
 

=>

 rake db:create  /path/to/ruby/gems/1.9.1/gems/activerecord-3.1.11/lib/active_record/railties/databases.rake:39:in `block in <top (required)>'
 

Je viens de découvrir ceci aujourd'hui :)

51voto

DanneManne Points 13408

Les tâches de rake sont automatiquement chargées à partir de la structure de dossiers lib/tasks/*.rake

Lorsque nous parlons de la tâche db: migrate par exemple, elle se situe dans la glissière des rails dans lib/tasks/databases.rake

Ainsi, pour un projet spécifique, vous aurez toujours les tâches dans la structure de dossiers du projet, ainsi que toutes les tâches dans les gems spécifiés.

21voto

jpgeek Points 1673

Pour trouver les fichiers et les numéros de ligne lorsqu'une tâche est définie et/ou modifié de faire ceci:

Démarrer une console rails:

rails c

Ensuite, exécutez ces commandes:

require 'rake'
Rake::TaskManager.record_task_metadata=true
Rake.application.load 'Rakefile'
tsk = Rake.application.tasks.each.find {|t| t.name =='my_task_name'}
tsk.locations

Râteau fondamentalement pouvez suivre les emplacements à l'interne et a une chouette méthode pour montrer à la demande. Le code ci-dessus essentiellement des charges de râteau, dit Râteau pour suivre l'emplacement des fichiers, les charges de la Rakefile (et tous les autres inclus), des trouvailles à la tâche en question, et appelle les emplacements méthode.

De sameers commentaire, pour râteau v 10.1.0 et, éventuellement, des versions plus anciennes de rake que vous pourriez avoir à appeler: tsk.actions au lieu de tsk.emplacements

5voto

pferdefleisch Points 1951

Vous n'avez pas spécifié la version des rails que vous utilisez, mais dans la version 3.0.7, les tâches db sont situées dans la gem ActiveRecord dans

 lib/active_record/railties/databases.rake
 

Mise à jour:

À partir de la version 3.2.7 de rails, les tâches sont toujours celles que j'ai indiquées ci-dessus.

2voto

AlexChaffee Points 2979

Dans Rails 3, la gemme railties définit de nombreuses tâches de rake.

 railties-3.2.5/lib/rails/tasks/annotations.rake
railties-3.2.5/lib/rails/tasks/documentation.rake
railties-3.2.5/lib/rails/tasks/engine.rake
railties-3.2.5/lib/rails/tasks/framework.rake
railties-3.2.5/lib/rails/tasks/log.rake
railties-3.2.5/lib/rails/tasks/middleware.rake
railties-3.2.5/lib/rails/tasks/misc.rake
railties-3.2.5/lib/rails/tasks/routes.rake
railties-3.2.5/lib/rails/tasks/statistics.rake
railties-3.2.5/lib/rails/tasks/tmp.rake
railties-3.2.5/lib/rails/test_unit/testing.rake
 

Si votre $EDITOR est configuré, vous pouvez facilement les voir vous-même avec la gemme open_gem :

 gem install open_gem
gem open railties
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X