2010-09-29 34 views

Respuesta

0

No tengo una respuesta directa, pero tengo una solución alternativa que podría funcionar para usted. Ninguna de mis tareas de rake usa parámetros. (Creo que traté de usar parámetros y tuve problemas para hacer que funcionaran). En cambio, confío en la matriz ENV. Así, por ejemplo, me gustaría escribir esa tarea como ejemplo:

task :name =>:pre_name do 
    do_something_with_name(ENV['first_name'], ENV['last_name']) 
end 

que se invoca como:

$ rake name first_name=John last_name=Smith 

Los datos de la matriz ENV estarían disponibles para la tarea pre_name también.

3

Sé que llego tarde a la fiesta, pero tuve el mismo problema y descubrí algo que no usaba variables de entorno. Puede usar Rake::Task.invoke para hacer esto. He aquí un ejemplo de una tarea de copia de seguridad de base de datos rastrillo:

namespace :db do 
    task :dump_db, [:dump_file, :rails_env] do |t, args| 
     puts "dumping to #{args[:dump_file]} with rails env = #{args[:rails_env]}" 
    end 

    task :stop_slave do 
     puts "stopping slave" 
    end 

    task :start_slave do 
     puts "starting slave" 
    end 

    task :upload_dump, [:dump_file] do |t, args| 
     puts "uploading #{args[:dump_file]}" 
    end 

    task :backup_to_s3, [:dump_file, :rails_env] do |t, args| 
     Rake::Task["db:stop_slave"].invoke() 
     Rake::Task["db:dump_db"].invoke(args[:dump_file], args[:rails_env]) 
     Rake::Task["db:start_slave"].invoke() 
     Rake::Task["db:upload_dump"].invoke(args[:dump_file]) 
    end 
end 
+0

Aunque esto funciona, tenga en cuenta que no va a configurar la tarea se invoca como una dependencia requisito explícito. – ledhed2222

9

En realidad es bastante simple - la: tarea previa recibirá los mismos parámetros que la tarea original. Todo lo que necesita hacer es asegurarse de que la firma sea similar; por ejemplo, si la primera tarea recibe: a,: b la: tarea previa también necesita recibirlas.

Ver más aquí: rake with params

+0

¡Excelente! ¡Justo lo que necesitaba! – nterry

-1
namespace :shell do 

    desc "Local hostname" 
    task :hostname do 
    puts "Local hostname" 
    sh "hostname" 
    end 

    desc "Local uptime" 
    task :uptime do 
    puts "Local uptime" 
    sh "uptime" 
    end 

    desc "Echo something" 
    task :echo,[:someword] do |t,args| 
    puts "--- #{args[:someword]} ---" 
    end 

end 


desc "Run all tasks" 
task :all , [:someword] => ["shell:hostname","shell:uptime","shell:echo"] do 
    puts "Done." 
end 
+0

Puede marcar el código fuente con 4 espacios principales, pero ¿qué desea responder? Por favor, brinde información acerca de lo que quiere decir con su ejemplo de codificación. – knut

Cuestiones relacionadas