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 rake telles que:

  • 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é certains projets utilisant rspec et je suis capable d’exécuter des rake spec pour exécuter tous les tests. Où la cible de spec définie?

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: migrer par exemple, elle se trouve dans la gem de rails dans lib/tasks/databases.rake

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

Si par décrit vous voulez dire 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 ' 

Je viens de découvrir ça aujourd’hui 🙂

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

Démarrer une console de 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 

Rake fondamentalement peut suivre les emplacements en interne et a une méthode astucieuse pour les montrer sur demande. Le code ci-dessus charge essentiellement rake, demande à Rake de suivre les emplacements des fichiers, charge le fichier Rakefile (et tous les autres fichiers inclus), trouve la tâche en question et appelle la méthode des emplacements.

A partir du commentaire de sameers, pour rake v 10.1.0 et éventuellement les anciennes versions de rake, vous devrez peut-être appeler: tsk.actions au lieu de tsk.locations

Vous n’avez pas spécifié la version des rails que vous utilisez, mais dans la version 3.0.7, les tâches de la db se trouvent dans la gemme ActiveRecord de

 lib/active_record/railties/databases.rake 

Mettre à jour:

A partir de la version 3.2.7 des rails, les tâches sont toujours là où je l’ai indiqué ci-dessus.

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

 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 joyau open_gem :

 gem install open_gem gem open railties 

Pour lister toutes les tâches:

 rake -P 

Comme de nombreuses tâches proviennent de gemmes que vous installez, il est difficile de savoir lesquelles sont ajoutées …

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

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