Question

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

rake -T

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

Était-ce utile?

La solution

En dépit de ce que d’autres ont dit, vous pouvez obtenir par programme l’emplacement source des tâches de rake dans une application rails. Pour ce faire, exécutez quelque chose comme ceci 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)

Ceci renverra les emplacements source de tout code exécuté pour cette tâche. Vous pouvez également utiliser #prerequisites au lieu de # emplacement_source pour obtenir une liste des noms de tâches préalables (par exemple, "environnement", etc.).

Vous pouvez également répertorier toutes les tâches chargées à l'aide de:

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.

Autres conseils

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

rake -W

Ceci 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 indiquer où une tâche est définie.

Malheureusement, il n’existe pas de méthode programmatique. Les tâches de rake peuvent être chargées soit à partir de rails eux-mêmes, de lib / tasks, ou de n’importe quel plugin avec un répertoire de tâches.

Ceci devrait absorber presque tout ce qui ne se trouve pas dans Rails:

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

En ce qui concerne 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 les rails 2.2.2 gem. Si vous avez une version différente de Rails, il vous suffit de rechercher " l'espace de noms: schéma ".

Vous voulez probablement en réalité la source de ActiveRecord :: SchemaDumper , mais je pense que vous ne devriez pas avoir de difficulté à déterminer où cela se trouve. : -)

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

Si vous avez importé des Rails dans votre structure de répertoires d'applications, cherchez plutôt dans vendor / rails / railties / lib / tasks

Dans les deux cas, db: schema: dump est dans database.rake.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top