Domanda

So che puoi visualizzare tutte le possibili attività di rake digitando

rake -T

Ma devo sapere cosa fa esattamente un'attività. Dall'output, come posso trovare un file sorgente che ha effettivamente l'attività? Ad esempio, sto cercando di trovare l'origine per l'attività db: schema: dump.

È stato utile?

Soluzione

Nonostante ciò che altri hanno detto, puoi ottenere a livello di codice la posizione di origine delle attività di rake in un'applicazione rails. Per fare ciò, esegui qualcosa di simile al seguente nel tuo 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)

Questo restituirà le posizioni di origine di qualsiasi codice che viene eseguito per questa attività. Puoi anche utilizzare #prerequisites invece di #source_location per ottenere un elenco di nomi di attività prerequisiti (ad esempio "ambiente", ecc.)

Puoi anche elencare tutte le attività caricate usando:

Rake.application.tasks

AGGIORNAMENTO: vedi la buona risposta di Magne di seguito. Per le versioni di rake > = 0.9.0 puoi utilizzare rake -W per mostrare la posizione di origine delle tue attività di rake.

Altri suggerimenti

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

rake -W

Questo è stato introdotto nel rake 0.9.0.

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

  

Supporto per il flag & # 8211; dove (-W) per mostrare dove è definita un'attività.

Sfortunatamente non esiste un modo programmatico per farlo. Le attività di rake possono essere caricate dalle rotaie stesse, lib / task o da qualsiasi plugin con una directory di attività.

Questo dovrebbe catturare quasi tutto ciò che non è all'interno di 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

Può essere trovato sulla riga 242 di lib / task / database.rake nella gemma rails 2.2.2. Se hai una versione diversa di Rails, cerca " namespace: schema " ;.

Probabilmente in realtà vuoi la fonte del ActiveRecord :: SchemaDumper , ma penso che non dovresti avere problemi a capire dove si trova. : -)

Per la maggior parte delle attività di rake in Rails, cerca nella directory gem di Rails, in lib / task.

Se hai venduto Rails nella struttura della directory dell'app, cerca invece in vendor / rails / railties / lib / task

Ad ogni modo, db: schema: dump è in databases.rake.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top