2009-05-06 8 views
37

Ich weiß, Sie alle möglichen Rake Aufgaben anzeigen können durchWie finde ich die Quelldatei für eine Rake-Aufgabe?

rake -T 

eingeben Aber ich muss wissen, was genau eine Aufgabe tut. Wie kann ich aus der Ausgabe eine Quelldatei finden, die tatsächlich die Aufgabe hat? Zum Beispiel versuche ich, die Quelle für die Aufgabe db: schema: dump zu finden.

Antwort

36

Trotz was andere gesagt haben, können Sie programmatisch den Quellort von Rake-Aufgaben in einer Rails-Anwendung abrufen. Um dies zu tun, nur so etwas wie die folgend in Ihrem Code oder von einer Konsole aus:

# 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) 

Dadurch kehren die Quellenort jeden Code, der für diese Aufgabe ausgeführt wird. Sie können auch #prerequisites anstelle von #source_location verwenden, um eine Liste der erforderlichen Aufgabennamen zu erhalten (z. B. "Umgebung" usw.).

können Sie auch alle Aufgaben Liste geladen werden:

Rake.application.tasks 

UPDATE: See Magnes gut unten Antwort. Für die Versionen von Rake> = 0.9.0 können Sie rake -W verwenden den Quellort Ihrer Rake Aufgaben zu zeigen.

+0

Ziemlich genial finden. – Tilendor

+1

Nur zur Info: Sie müssen sicherstellen, dass Rake geladen ist, bevor Sie diese Methode verwenden. Wenn nicht, machen Sie einfach einen "Require 'Rake". –

+0

viel verpflichtet, Art Sir! – mrstif

0

Für die meisten Rake Aufgaben in Rails, schaut in dem Rails-Juwel Verzeichnis, in lib/Aufgaben.

Wenn Sie Ihre App-Verzeichnisstruktur weiterverkauft Rails in dann in vendor/Schienen aussehen/railties/lib/Aufgaben statt

So oder so, db: schema: dump ist in databases.rake.

+0

Aber gibt es einen programmatischen Weg, dies zu tun? Ich landete einen Fund in der Dateisuche. – Tilendor

6

Es gibt keinen programmatischen Weg, dies leider zu tun. Rake-Tasks können entweder von Rails selbst, von lib/tasks oder von einem beliebigen Plugin mit einem Aufgabenverzeichnis geladen werden.

Dies sollte die meisten alles nab nicht innerhalb Rails selbst:

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

Was db:schema:dump, hier ist die Quelle:

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 

Es kann auf der Leitung 242 von lib/Aufgaben/Datenbank. Rechen in den Schienen 2.2.2 gem. Wenn Sie eine andere Version von Rails haben, suchen Sie einfach nach "namespace :schema".

Wahrscheinlich wollen Sie eigentlich die Quelle der ActiveRecord::SchemaDumper, aber ich denke, Sie sollten keine Schwierigkeiten haben herauszufinden, wo das ist. :-)

71

Ich weiß, das ist eine alte Frage, aber in jedem Fall:

rake -W 

Dies wurde in Rake 0.9.0 eingeführt.

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

Unterstützung der -Wo (-W) Flag für zeigt, wo eine Aufgabe definiert ist.

+0

Danke für die Aktualisierung, immer schön, um eine aktuelle Antwort zu erhalten! –

+0

Vielen Dank. Süss! :) – flagman

+0

Dies sollte die akzeptierte Antwort sein! –

Verwandte Themen