web-dev-qa-db-fra.com

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

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

  • rake test
  • rake db:migrate
  • etc

La question est, où ces tâches sont-elles décrites? Le Rakefile par défaut n'a pas toutes ces tâches.

De plus, j'ai vérifié un projet qui utilise rspec et je peux exécuter rake spec pour exécuter tous les tests. Où la cible spec est-elle définie?

64
ryanprayogo

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

Lorsque nous parlons de la tâche db: migrer par exemple, elle est située dans la gemme 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 gemmes spécifiées.

48
DanneManne

Si par décrit vous voulez dire défini, râteau -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 le découvrir aujourd'hui :)

105
Adam Groves

Pour rechercher les fichiers et les numéros de ligne spécifiques où une tâche est définie et/ou modifiée, procédez comme suit:

Démarrez une console Rails:

Rails c

Exécutez ensuite ces commandes:

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

Rake peut essentiellement suivre les emplacements en interne et dispose d'une méthode astucieuse pour les afficher sur demande. Le code ci-dessus charge essentiellement rake, dit à Rake de suivre les emplacements des fichiers, charge le rakefile (et tous les autres inclus), trouve la tâche en question et appelle la méthode locations dessus.

D'après les mêmes commentaires, pour rake v 10.1.0 et peut-être d'anciennes versions de rake, vous devrez peut-être appeler: tsk.actions au lieu de tsk.locations

19
jpgeek

Vous n'avez pas spécifié la version de Rails que vous utilisez mais dans 3.0.7 les tâches db sont situées dans la gemme ActiveRecord dans

lib/active_record/railties/databases.rake

Mise à jour:

À partir de Rails version 3.2.7, les tâches sont toujours là où je l'ai indiqué ci-dessus.

5
mraaroncruz

Pour répertorier toutes les tâches:

rake -P

Étant donné que de nombreuses tâches proviennent de gemmes que vous installez, il est difficile de savoir lesquelles sont ajoutées ...

2
luigi7up

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

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 le open_gem bijou:

gem install open_gem
gem open railties
2
AlexChaffee

Le projet que vous avez extrait utilise probablement la gemme rspec-Rails . Ce joyau définit la tâche spec. Vous pouvez voir le code source pour cela ici:

https://github.com/rspec/rspec-Rails/blob/master/lib/rspec/Rails/tasks/rspec.rake

1
David Grayson