2012-01-08 10 views

risposta

15

task deve essere definito come parametro per l'attività blocco.

desc "Populate DB" 
task :populate do |task| 
    puts task.comment # "Populate DB" 
    puts task.full_comment # "Populate DB" 
    puts task.name # "populate " 
end 

Edit: Questa soluzione funziona con il rastrello 0.8.7. Almeno il rake 0.9.2.2 ha bisogno di un ulteriore Rake::TaskManager.record_task_metadata = true (ho controllato solo queste due versioni).

uno stand alone rubino script con adattamento:

gem 'rake' #'= 0.9.2.2' 
require 'rake' 

#Needed for rake/gem '= 0.9.2.2' 
Rake::TaskManager.record_task_metadata = true 

desc "Populate DB" 
task :populate do |task| 
    p task.comment # "Populate DB" 
    p task.full_comment # "Populate DB" 
    p task.name # "populate " 
end 

if $0 == __FILE__ 
    Rake.application['populate'].invoke() #all tasks 
end 

Motivo: nel rake/task_manager.rb linea 30 (rake 0.9.2.2) è un controllo

if Rake::TaskManager.record_task_metadata 
    add_location(task) 
    task.add_description(get_description(task)) 
    end 

Il valore di default è impostato false in linea 305

+1

'task.comment' sembra essere il ritorno' quelle negative per me. Qualche idea? –

+0

L'esempio funziona bene per me. Quale versione usi? Ho ruby ​​1.9.2 e 'RAKEVERSION = '0.8.7'' – knut

+0

Ho aggiornato il mio rake a' 0.9.2.2' - ora ho 'nil' per' task.comment' e 'task.full_comment'. – knut

0

Avendo un problema simile, volevo mostrare all'utente una schermata di aiuto personalizzata. La risposta qui mi ha aiutato molto.

E 'molto importante che

Rake::TaskManager.record_task_metadata = true 

è fatto prima della prima definizione dei compiti.

Poi si può fare

Rake.application.tasks.each do |t| 
    printf("%-}s # %s\n", 
      t.name_with_args, 
      t.comment) 
    end 

dettagli possono essere trovati indagando https://github.com/jimweirich/rake/blob/master/lib/rake/application.rb#L284