Forum: Rails-ES intentando entender el Rake::Task

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Fernando G. (Guest)
on 2009-01-26 20:41
(Received via mailing list)
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.
javier ramirez (Guest)
on 2009-01-26 21:01
(Received via mailing list)
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
Felipe T. Armero (Guest)
on 2009-01-26 21:04
(Received via mailing list)
¿Probaste con?

ENV['VERSION']= '0'
Rake::Task['db:migrate'].invoke
Alfredo S. (Guest)
on 2009-01-26 21:07
(Received via mailing list)
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... :-)
Ciao!!




El 26/01/2009, a las 19:41, Fernando G.
escribió:
> Hola gente,
Fernando G. (Guest)
on 2009-01-26 21:18
(Received via mailing list)
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 :)

f.
Fernando G. (Guest)
on 2009-01-26 21:55
(Received via mailing list)
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 :)

f.
Fernando G. (Guest)
on 2009-01-26 21:56
(Received via mailing list)
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... :-)
> Ciao!!
>

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

f.
This topic is locked and can not be replied to.