Intentando entender el Rake::Task


#1

Hola gente,

Estoy intentando hacer una rake que ejecuta otros rake. Estoy mirando
la clase Rake::Task tal que
así:
Rake::Task[‘db:migrate’].execute

Ya sé que se puede ejecutar con dependencias pero quiero ejecutar las
llamadas inline como digo arriba.

Mi primera pregunta es ¿Cómo le puedo pasar argumentos? para intentar
algo como esto

Rake::Task['db:migrate VERSION=0'].execute

Mirando la documentación he visto esto:

execute(args=nil)

Pero no sé como hacerlo… no parece funcionar:
Rake::Task[‘db:migrate’].execute( ‘VERSION=0’ )

ni

Rake::Task['db:migrate'].execute( :VERSION => 0 )

ni

Rake::Task['db:migrate'].execute( '0' )

No sé si lo hago bien, mal … si se puede… en fín… a ver si alguien
se ha pegado con esto o sabe sugerirme algo.

Saludos
f.


#2

Hola,

Mirando la documentación he visto esto:

execute(args=nil)

Pero no sé como hacerlo… no parece funcionar:
Rake::Task[‘db:migrate’].execute( ‘VERSION=0’ )

yo creo que el problema va a ser que la tarea db:migrate no está
preparada para aceptar argumentos. Me explico… tradicionalmente en rake
cuando pasas parámetros en línea de comandos tal que así

rake db:migrate VERSION=0

lo que hace rake es crearse variables de entorno, de forma que dentro de
tu tarea tú haces algo así como
ENV[‘VERSION’]

para recuperar el valor.

Esto era la forma tradicional, porque desde hace ya un tiempo, puedes
definir que tus tareas tengan parámetros (posicionales) de forma que
puedes hacer algo como

rake start_iteration[debug]

y eso lo que hace es llamar a una tarea definida tal que así

task :start_iteration, [:log_level] do |t, args|
puts “el nivel de log es #{args.log_level}”
end

que queda mucho más limpio que lo del ENV

Ahora bien, por lo que veo casi nadie usa parámetros en las tareas
todavía, por lo que la forma de pasarlos es via environment. En tu caso
puedes hacer

ENV[‘VERSION’]=0

Rake::Task[‘db:migrate’].execute

Y ya está… como la tarea mirará ENV, ahí lo tienes

saludos,


javier ramírez

…i do ruby on rails development in madrid, spain, at
http://www.aspgems.com
…you can find out more about me on http://formatinternet.wordpress.com
and http://workingwithrails.com/person/5987-javier-ramirez


#3

¿Probaste con?

ENV[‘VERSION’]= ‘0’
Rake::Task[‘db:migrate’].invoke


#4

Fernando,

si corres una tarea como rake mi_tarea:test ARG=‘hola’

puedes coger los parametros en la tarea tal que asi:

namespace :mi_tarea do
task :test => :environment do

arg = ENV["ARG"]
.....

end
end

No se si eso responde exactamente a lo que preguntabas, pero espero
que te sirva… :slight_smile:
Ciao!!

El 26/01/2009, a las 19:41, Fernando G.
escribió:

Hola gente,


#5

El día 26 de enero de 2009 19:58, javier ramirez
removed_email_address@domain.invalid
escribió:>

Esto era la forma tradicional, porque desde hace ya un tiempo, puedes
que queda mucho más limpio que lo del ENV
Genial… por que yo si estoy usando parámetros en las Rake y esto me
viene de muerte.

Ahora bien, por lo que veo casi nadie usa parámetros en las tareas
todavía, por lo que la forma de pasarlos es via environment. En tu caso
puedes hacer

ENV[‘VERSION’]=0

Rake::Task[‘db:migrate’].execute

Funciona perféctament… gracias javi :slight_smile:

f.


#6

El día 26 de enero de 2009 20:03, Felipe T. Armero
removed_email_address@domain.invalid
escribió:> ¿Probaste con?

ENV[‘VERSION’]= ‘0’
Rake::Task[‘db:migrate’].invoke

oki… thanks… es lo que comentaba javi :slight_smile:

f.


#7

El día 26 de enero de 2009 20:06, Alfredo removed_email_address@domain.invalid
escribió:> …

   end

end

No se si eso responde exactamente a lo que preguntabas, pero espero
que te sirva… :slight_smile:
Ciao!!

nope… no era esto de lo que hablábamos … pero se agradece igual…

f.