2012-01-08 8 views

Respuesta

15

task debe ser definido como un parámetro para la tarea de bloque.

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

Editar: Esta solución funciona con el rastrillo 0.8.7. Al menos rastrillo 0.9.2.2 necesita un Rake::TaskManager.record_task_metadata = true adicional (revisé solo estas dos versiones).

un independiente rubí script con la adaptación:

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: rake/task_manager.rb en la línea 30 (rake 0.9.2.2) es un cheque

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

El valor predeterminado false se encuentra en la línea 305

+1

'task.comment' parece volver' las negativas para mí. ¿Algunas ideas? –

+0

El ejemplo funciona bien para mí. ¿Qué versión usas? Tengo ruby ​​1.9.2 y 'RAKEVERSION = '0.8.7'' – knut

+0

Actualicé mi rake a' 0.9.2.2' - ahora obtengo 'nil' para' task.comment' y 'task.full_comment'. – knut

0

Al tener un problema similar, quería mostrar al usuario una pantalla de ayuda personalizada. La respuesta aquí me ayudó mucho.

Es muy importante que

Rake::TaskManager.record_task_metadata = true 

se hace antes de la primera definición de tareas.

A continuación, puede hacer

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

detalles se pueden encontrar mediante la investigación de https://github.com/jimweirich/rake/blob/master/lib/rake/application.rb#L284

Cuestiones relacionadas