2011-03-05 9 views
20

Tengo una tarea de rake a la que quiero pasar parámetros. Por ejemplo, quiero emitir un comando comoPasar un parámetro o dos a una tarea de Rake

<prompt> rake db:do_something 1 

y dentro de la tarea rake:

... 
cust = Customer.find(the_id_passed_in) 
# do something with this customer record, etc... 
... 

Bastante sencillo, ¿verdad?

+2

posible duplicado de [¿Cómo pasar argumentos de línea de comandos a una tarea rake?] (Http://stackoverflow.com/questions/825748/how-do-i-pass-command-line-arguments-to-a-rake-task) –

Respuesta

38

La forma en que los comandos de rake aceptan y definen argumentos es, bueno, no es bonita.

Llame a su tarea de esta manera:

<prompt> rake db:do_something[1,2] 

He añadido un segundo parámetro para mostrar que necesitará la coma, pero se omite ningún espacio.

y definir así:

task :do_something, :arg1, :arg2 do |t, args| 
    args.with_defaults(:arg1 => "default_arg1_value", :arg2 => "default_arg2_value") 
    # args[:arg1] and args[:arg2] contain the arg values, subject to the defaults 
end 
+1

¿cómo se hace esto con una tarea que requiere que se cargue el entorno de los rieles? p.ej. normalmente 'task: do_something =>: environment do' – Duke

+10

' task: do_something, [: arg1,: arg2] =>: environment do | t, args | ' – Duke

+2

Creo que quieres otra coma:' task: do_something, : arg1' ... –

0

Mientras que el paso de parámetros, es mejor opción es un archivo de entrada, puede ser esto un excel un JSON o lo que sea necesario y de ahí leer la estructura de datos y las variables usted necesita desde eso incluyendo el nombre de la variable como es la necesidad. Para leer un archivo puede tener la siguiente estructura.

namespace :name_sapace_task do 
    desc "Description task...." 
     task :name_task => :environment do 
     data = ActiveSupport::JSON.decode(File.read(Rails.root+"public/file.json")) if defined?(data) 
    # and work whit yoour data, example is data["user_id"] 

    end 
    end 

Ejemplo JSON

{ 
    "name_task": "I'm a task", 
    "user_id": 389, 
    "users_assigned": [389,672,524], 
    "task_id": 3 
} 

Ejecución

rake :name_task 
+1

¿Por qué le das [dos respuestas idénticas] (http://stackoverflow.com/a/22070576/861716)? Es mejor responder una pregunta y marcar la otra como duplicada. –

Cuestiones relacionadas