Ejecutar rake y deamons desde la aplicacion no funciona desde produccion


#1

Hola expertos,

tengo una aplicación que ejecuta unos rake tasks y un daemon desde una
aplicacion Rails,

estos métodos los ejecuto desde mis controllers:

call_deamon('explorer_ctl','start')

en desarrollo (osx) me anda bien y pero en producción no se que pasa (y
tengo la misma configuracion aunque es linux Debian etch),
el navegador se demora demasiado en responder al request, pero de todas
formas ejecuta el método correctamente, incluso puedo ir a otra pagina
sin
terminar el request y el daemon ya esta corriendo , al igual que el rake
task,

tengo estos dos metodos:

def call_rake(task,options={})
options[:rails_env] = Rails.env
args = options.map{|n,v| “#{n.to_s.upcase}=’#{v}’”}
system “/usr/bin/rake #{task} #{args.join(’ ')} --trace >>
#{Rails.root}/log/explorer_rake.log &”
end

def call_deamon(daemon,option)
system “#{Rails.root}/lib/daemons/#{daemon} #{option}”
end

gracias

Atte.
Miguel Michelson Martinez


#2

El 14/01/2009, a las 22:47, Miguel M. escribió:

al igual que el rake task,

En producción si una petición tarda mucho, se corta para no colapsar
el servidor web.

def call_deamon(daemon,option)
system “#{Rails.root}/lib/daemons/#{daemon} #{option}”
end

gracias

Añade fork

Kernel.fork do
tarea larga
end

Así el servidor web crea un nuevo proceso.

Si quires la salida del proceso. Tiene que ser asíncrono. Guardas la
salida del comando en algún sitio y luego lo muestras en la aplicación.


#3

El 15/01/2009, a las 23:10, Miguel M. escribió:

Kernel.fork do
  call_deamon('explorer_ctl','start')
end

SpyderStatus.start
redirect_to pages_path

end

pero aun asi sigue estando lento, quizas lo implemente mal o no?

¿Que sigue estando lento? ¿Que hacen los daemon? ¿Qué resultado esperas?

Que es eso del SpyderStatus.start ¿Y por que un status tiene un método
status? ¿Qué empiece el status?

Yo no te puedo ayudar con tan poca información, por lo que te sugiero
que tires por los performance test


Guillermo Álvarez Fernández
removed_email_address@domain.invalid
http://cientifico.net


#4

Hola Guillermo,

Atte.
Miguel Michelson Martinez

www.artenlinea.com

2009/1/16 Guillermo Álvarez Fernández removed_email_address@domain.invalid

pero aun asi sigue estando lento, quizas lo implemente mal o no?

¿Que sigue estando lento? ¿Que hacen los daemon? ¿Qué resultado esperas?

lo que está lento es el request y el redirect de la pagina una vez que
voy a
exporer_task/start, el navegador se queda pegado esperando que cargue el
request . pero el daemon si se inicia , solo que tengo que reiniciar la
pagina y ver que ha funcionado.

el daemon lo que hace es ir a crawlear sitios web y guardar la
informacion
en bases de datos.

lo que espero es que cuando inicie el daemon por la accion del navegador
,
es que se incie y rápidamente me redirija a pages_path, como lo hace en
development

Que es eso del SpyderStatus.start ¿Y por que un status tiene un método
status? ¿Qué empiece el status?

el spyderStaus es solo un nuevo registro que cuenta el tioempo desde
cuando
hasta cuando el crawl funciona y el .status es solo un true o false, asi
puedo saber si el crawl esta funcionando o no

Yo no te puedo ayudar con tan poca información, por lo que te sugiero que
tires por los performance test

espero que esta información sirva, solo pensaba que era un problema mas
menos conocido

saludos


#5

Hola Guillermo , gracias por responder

mira hice esto,

class ExplorerTasksController < ApplicationController

def start

Kernel.fork do
  call_deamon('explorer_ctl','start')
end

SpyderStatus.start
redirect_to pages_path

end

pero aun asi sigue estando lento, quizas lo implemente mal o no?

Saludos

Atte.
Miguel Michelson Martinez

www.artenlinea.com

2009/1/15 Guillermo Álvarez Fernández removed_email_address@domain.invalid