2009-05-06 10 views
37

Je sais que vous pouvez voir toutes les tâches de rake possibles en tapantComment trouver le fichier source d'une tâche rake?

rake -T 

Mais j'ai besoin de savoir exactement ce une tâche fait. À partir de la sortie, 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.

Répondre

36

Malgré ce que d'autres ont dit, peut obtenir par programme l'emplacement source des tâches rake dans une application rails. Pour ce faire, il suffit d'exécuter quelque chose comme ce qui suit dans votre code ou à partir d'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 est exécuté pour cette tâche. Vous pouvez également utiliser #prerequisites au lieu de #source_location pour obtenir la liste des noms de tâches prérequis (par exemple, 'environnement', etc.).

Vous pouvez aussi lister toutes les tâches chargées à l'aide:

Rake.application.tasks 

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

+0

Jolie trouvaille géniale. – Tilendor

+1

Juste pour info: vous devez vous assurer que rake est chargé avant d'utiliser cette méthode. si ce n'est pas le cas, faites simplement un "rake". –

+0

beaucoup obligé, gentil monsieur! – mrstif

0

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

Si vous avez vendored Rails dans votre structure de répertoire d'application puis regardez dans vendor/rails/railties/lib/tâches à la place

Quoi qu'il en soit, db: schéma: vidage est databases.rake.

+0

Mais y a-t-il une manière programmatique de faire cela? J'ai fini par faire une recherche dans la recherche de fichiers. – Tilendor

6

Malheureusement, il n'existe aucun moyen de programmation. Les tâches de rake peuvent être chargées à partir des rails eux-mêmes, de lib/tasks, ou de n'importe quel plugin avec un répertoire de tâches.

Cela devrait choper la plupart de tout pas dans Rails lui-même:

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

Quant à 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 

Il se trouve sur la ligne 242 de lib/tâches/base de données. ratisser dans les rails 2.2.2 gem. Si vous avez une version différente de Rails, recherchez "namespace :schema".

Vous voulez probablement la source du ActiveRecord::SchemaDumper, mais je pense que vous ne devriez avoir aucune difficulté à trouver où c'est. :

71

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

rake -W 

Cela a été introduit en râteau 0.9.0.

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

Appui à la -où (-W) drapeau pour montrer où une tâche est définie.

+0

Merci de mettre à jour ce, toujours agréable d'avoir une réponse plus actuelle! –

+0

Merci. Doux! :) – flagman

+0

Cela devrait être la réponse acceptée! –

Questions connexes