Forum: Rails-ES detener un rake task desde la aplicacion

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.
Miguel M. (Guest)
on 2008-11-12 18:37
(Received via mailing list)
Hola expertos,


estoy haciendo una aplicación que inicia una tarea rake, y queria
preguntarles se puede hacer para detener esta tarea rake desde la
aplicacion,
pienso en hacer una llamada a `ps aux | ruby`, para conocer si se está
ejecutando ese determinado proceso y luego hacer un kill a ese proceso

¿hay alguna forma mejor de hacerlo?


Saludos



Atte.
Miguel Michelson Martinez
Guillermo Álvarez Fernández (Guest)
on 2008-11-12 21:52
(Received via mailing list)
El 12/11/2008, a las 17:37, Miguel M.
escribió:> estoy haciendo una aplicación que inicia una tarea rake, y queria
> preguntarles se puede hacer para detener esta tarea rake desde la
> aplicacion,

Si es una tarea rake que no termina, no es una tarea. Es un demonio.
Como tal no debe de hacerse como una tarea rake, sino más bien como un
script/runner (Aunque siempre hay excepciones).

El tipo de demonio, así imaginando, puede ser de tres tipos.

1.- Loop infinito
2.-Asíncrona (Un servidor que espera conexiones)
3.- Un proceso que se ejecuta cada x tiempo.

Para el primer y segundo caso, lo más cómodo es tirar de la gema
daemons, o del ya mítico start-stop-daemon. Para el tercero, lo más
cómodo es cron.

Esto respecto a como crear una tarea que no termina.

> pienso en hacer una llamada a `ps aux | ruby`, para conocer si se
> está ejecutando ese determinado proceso y luego hacer un kill a ese
> proceso.

Supongamos que te refieres a `ps aux | grep ruby` es muy poco
elegante, además de que tu aplicación no podría estar en ruby. De ser
así, se mataría a si misma. Entonces necesitamos saber de alguna
manera cual es el proceso que queremos matar, reiniciar, o en general,
enviar una señal.

La solución a este problema esta en /var/pid, /tmp/pids /var/spool/
pids etc... En este sitio del sistema (depende de que sistema sea), se
guardan archivos de texto con el número del pid (Proccess ID).

La siguiente pregunta obvia, es como se genera ese archivo. Para lo
cual, se me ocurren otras 3 opciones.

1.- start-stop-daemon se le pasa un parámetro para que lo haga.
2.- La aplicacion cuando arranca, lo guarda a mano.
3.- Es un mongrel o otra aplicacion rails/ruby la que lo hace, o la
que incluso, lo guarda en memoria.

De todas formas, con los pocos datos que das... yo no se recomendarte
nada concreto.

Saludos
Miguel M. (Guest)
on 2008-11-12 23:50
(Received via mailing list)
Hola Guillermo ,

Gracias por la ayuda  y disculpa no haber dado mas antecedentes al
respecto.

te explico un poco mas.

tengo dos procesos. [1]

1º El primero es para examinar sitios e ir guardando la información
metatags, links y frases , este es un proceso que puede durar mucho
tiempo.

2º El segundo es para ir Rankeando todas las frases de cada pagina según
las
relevancias de cada palabra de la frase en relación a todo el corpus de
documentos, eso se debería ejecutar una vez que termina el otro proceso.


ahora puedo iniciar el primer proceso desde la aplicación , pero no se
como
detenerlo en algun punto,
También tengo implementado el primer proceso  como 'demonio en base al
deamon generator, ¿es posible pasar parametros al demonio? ej:
my_deamon_ctl
-e1000 start

ahora, no se cual es la mejor opcion , si el demonio o el rake para esto
¿que recomendais?


muchas gracias

[1] http://pastie.org/313362



2008/11/12 Guillermo Álvarez Fernández <removed_email_address@domain.invalid>
Miguel M. (Guest)
on 2008-11-13 18:13
(Received via mailing list)
Hola,

finalmente deje el indexador como demonio, mucho mejor asi

y el rankeador como rake task

saludos

Atte.
Miguel Michelson Martinez
---------------------------------------
www.artenlinea.com


2008/11/12 Miguel M. <removed_email_address@domain.invalid>
This topic is locked and can not be replied to.