2009-05-06 14 views
37

So che è possibile visualizzare tutti i possibili compiti rake digitandoCome trovo il file sorgente per un'attività rake?

rake -T 

ma ho bisogno di sapere che cosa esattamente un compito fa. Dall'output, come posso trovare un file sorgente che abbia effettivamente l'attività? Ad esempio, sto cercando di trovare l'origine per il db: schema: dump task.

risposta

36

Nonostante ciò che altri hanno detto, è possibile in grado di ottenere la posizione di origine delle attività di rake in un'applicazione di rotaie. Per fare questo, basta eseguire qualcosa di simile al seguente nel codice o da una 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) 

Ciò restituirà le posizioni di origine di qualsiasi codice che viene eseguito per questo compito. È inoltre possibile utilizzare #prerequisites anziché #source_location per ottenere un elenco di nomi di attività prerequisite (ad esempio "ambiente", ecc.).

È possibile anche elencare tutte le attività caricate utilizzando:

Rake.application.tasks 

UPDATE: buona risposta Sede di Magne di seguito. Per le versioni di rake > = 0.9.0 è possibile utilizzare rake -W per mostrare la posizione di origine delle attività di rake.

+0

Scoperta abbastanza impressionante. – Tilendor

+1

Solo per FYI: devi assicurarti che il rake sia caricato prima di usare questo metodo. se non lo è, fai semplicemente una "richiesta" di rake "". –

+0

molto obbligato, gentile signore! – mrstif

0

Per la maggior parte delle operazioni di rake in Rails, cercare nella directory gem di Rails, in lib/tasks.

Se hai vendored Rails nel tuo struttura di directory app quindi cercare in vendor/rails/railties/lib/task invece

In entrambi i casi, db: schema: discarica è in databases.rake.

+0

Ma c'è un modo programmatico per farlo? Ho finito per fare una ricerca nella ricerca di file. – Tilendor

6

Purtroppo non esiste un metodo programmatico per farlo. Le attività di Rake possono essere caricate da rails, lib/tasks o da qualsiasi plugin con una directory di attività.

Questo dovrebbe agguantare la maggior parte tutto non all'interno Rails stesso:

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

Per quanto riguarda db:schema:dump, ecco la fonte:

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 

Si può trovare on line 242 del lib/task/database. rastrellare le rotaie 2.2.2 gemma. Se hai una versione diversa di Rails, cerca "namespace :schema".

Probabilmente si desidera la sorgente dello ActiveRecord::SchemaDumper, ma penso che non dovresti avere problemi a capire dove sia. :-)

71

So che questa è una vecchia questione, ma in ogni caso:

rake -W 

Questo è stato introdotto in rake 0.9.0.

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

Il supporto per la (-W) bandiera -dove per mostrare dove è definito un compito.

+0

Grazie per l'aggiornamento, è sempre bello avere una risposta più attuale! –

+0

Grazie. Dolce! :) – flagman

+0

Questa dovrebbe essere la risposta accettata! –

Problemi correlati