Comment trouver le fichier source pour une tâche de râteau?

Je sais que vous pouvez voir toutes les tâches de rake possibles en tapant

rake -T 

Mais j’ai besoin de savoir ce que fait exactement une tâche. Comment puis-je trouver un fichier source qui a réellement la tâche? Par exemple, j’essaie de trouver la source de la tâche db: schema: dump.

Malgré ce que d’autres ont dit, vous pouvez obtenir par programme l’emplacement source des tâches de rake dans une application de rails. Pour ce faire, exécutez simplement ce qui suit dans votre code ou depuis une console:

 # load all the tasks associated with the rails app Rails.application.load_tasks # get the source locations of actions called by a task task_name = 'db:schema:load' # fully scoped task name Rake.application[task_name].actions.map(&:source_location) 

Cela renverra les emplacements source de tout code qui sera exécuté pour cette tâche. Vous pouvez également utiliser #prerequirejsites au lieu de #source_location pour obtenir une liste de noms de tâches prérequirejs (par exemple, “environnement”, etc.).

Vous pouvez également lister toutes les tâches chargées en utilisant:

 Rake.application.tasks 

MISE À JOUR: Voir la bonne réponse de Magne ci-dessous. Pour les versions de rake> = 0.9.0, vous pouvez utiliser rake -W pour afficher l’emplacement source de vos tâches de rake.

Je sais que c’est une vieille question, mais en tout cas:

 rake -W 

Cela a été introduit dans rake 0.9.0.

http://rake.rubyforge.org/doc/release_notes/rake-0_9_0_rdoc.html

Prise en charge de l’indicateur –where (-W) pour afficher l’emplacement où une tâche est définie.

Il n’y a pas de moyen programmatique de le faire malheureusement. Les tâches de rake peuvent être chargées à partir de rails, de lib / tasks ou de tout plug-in avec un répertoire de tâches.

Cela devrait attraper tout ce qui n’est pas dans Rails lui-même:

 find . -name "*.rake" | xargs grep "whatever" 

Comme pour db:schema:dump , voici la source:

 desc "Create a db/schema.rb file that can be portably used against any DB supported by AR" task :dump => :environment do require 'active_record/schema_dumper' File.open(ENV['SCHEMA'] || "#{RAILS_ROOT}/db/schema.rb", "w") do |file| ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file) end end 

On peut le trouver à la ligne 242 de lib / tasks / database.rake dans le gem 2.2.2 de rails. Si vous avez une version différente de Rails, recherchez simplement ” namespace :schema “.

Vous voulez probablement la source de l’ ActiveRecord::SchemaDumper , mais je pense que vous ne devriez pas avoir de problème pour savoir où cela se trouve. 🙂

Pour la plupart des tâches de rake dans Rails, regardez dans le répertoire gem Rails, dans lib / tasks.

Si vous avez vendu Rails dans la structure de votre répertoire d’application, recherchez plutôt dans le fichier fournisseur / rails / railties / lib / tasks

De toute façon, db: schema: dump est dans databases.rake.