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
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?
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.
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 :)
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
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
À partir de Rails version 3.2.7, les tâches sont toujours là où je l'ai indiqué ci-dessus.
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 ...
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
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