Ejecutar un controlador desde la consola

Que tal Gente!.

Tengo un problema, estoy desarrollando un sistema en donde existe una
tarea programada y dicha tarea corre cada 3 minutos (ejecuta unos
reportes y ciertas cosas). La tarea es un controlador, y la ejecuto
mediante un navegador sin problemas

http://localhost/tarea_programada/ejecutar_tarea

ahora,como hago para programar que se ejecute dicho controlador cada
cierto tiempo . Es decir, un crow… Si alguien me puede ayudar, se lo
agradezco.

El sistema operativo esta en linux

Saludos.

2008/3/17 Jhon K. [email protected]:

ahora,como hago para programar que se ejecute dicho controlador cada
cierto tiempo . Es decir, un crow… Si alguien me puede ayudar, se lo
agradezco.

No estoy seguro de que esta sea la mejor solución pero puedes crear un
trabajo de cron que llame a curl que hará el request a tu sitio web.
Cualquier tutorial básico de curl te enseñara como hacer los requests
(y lo mismo aplica para cron).
De nuevo, pensando rápido esta es una posible solución, pero no estoy
convencido de que sea la optima.

2008/3/17 Jhon K. [email protected]:

cierto tiempo . Es decir, un crow… Si alguien me puede ayudar, se lo
simplelogica.net

Hola,

Según he leído puedes ejecutar una acción de controlador desde línea
de comandos usando este truco que simula una petición como en un test:

script/runner “require ‘action_controller/integration’;app =
ActionController::Integration::Session.new; app.get
‘/tarea_programada/ejecutar_tarea’”

Lo cual parece un poco rebuscado, quizás sería mejor usar un simple wget:

wget http://localhost/tarea_programada/ejecutar_tarea

De todas maneras en mi opinión es mucho más simple implementar las
tareas programadas de background como tareas rake…


Sergio Gil Pérez de la Manga
e-mail > [email protected]
blog > http://www.lacoctelera.com/porras

aqui hay un buen articulo al respecto

http://cleanair.highgroove.com/articles/2006/06/23/running-background-jobs

Saludos

2008/3/17 Sergio Gil Pérez de la Manga [email protected]:

El 17/03/2008, a las 18:01, Jhon K.
escribió:

Que tal Gente!.

Pues bien. Gracias.

ahora,como hago para programar que se ejecute dicho controlador cada
cierto tiempo . Es decir, un crow… Si alguien me puede ayudar, se
lo
agradezco.

El sistema operativo esta en linux

No todos los linux tiene curl. Cuidado. mientras en el mundo bsd lo
normal es curl e incluso fetch, en un linux, lo más normal (por mi
experiencia) es encontrar wget.

Lo suyo es que ejecutes el cron desde el usuario que ejecute el
servidor web, e incluso uno con menos privilegios, pero visto el
caso… vamos a pasar de temas de seguridad por el momento.

el cron funciona con lineas de texto. Se basa en un archivo por
usuario y uno general. Supongamos el general que, en tu caso tendría
esta sintaxis:
*/5 * * * * root wget http://localhost/tarea/accion

te explico
*/5 todos los minutos que al dividir por 5 su resto sea 0, vamos cada
cinco minutos

  • a todas las horas
  • Todos los números de
    día* Todos los meses
  • Todos los días de la semana
    root Como el usuario root
    wget http:/… es el comando

lo más sencilo que se me ocurre es que vayas a una consola y escribas
tal cual

echo */5 * * * * root wget http://localhost/tarea/accion >> /etc/crontab

echo escupe por stdout los argumentos

añade a un nodo del sistema de archivos
/etc/crontab es el nodo al que queremos añadir la información sin
reescribir el contenido.

Si escribes eso tal cual el sistema ejecutará wget … como root cada
5 minutos.

En aplicaciones rails lo uso de una manera concreta pese a que digan
que es mejor hacerlo con rake. El sistema de caches se refresca cada 5
minutos para generar contenido dinámico. En vez de generar el
contenido el primer usuario que consulte el recurso despues de la
expiración, lo añado a cron.

En la aplicación, toda petición desde 127.0.0.1 es generada sin caché,
y su resultado es almacenado en cache. Una consulta lenta, no será el
usuario quien la procese, sino que es el propio sistema.

Espero que te sirva de ayuda.

Un Saludo.

2008/3/17 Jhon K. [email protected]:

cierto tiempo . Es decir, un crow… Si alguien me puede ayudar, se lo
simplelogica.net

Cuando necesito algo como lo que pides, separo el código en un módulo
propio que situo en lib/, de esta forma lo puedo llamar desde el
código de el controlador, desde un task de Rake o desde script/runner
si es necesario.

Suerte.

OK, Gracias. Pruebo y les comento como me fue.

Saludos

buenas gente ruby, tengo el siguiente inconveniente:

root@jarrouj-desktop:/usr/lib/ruby/reporte# ./script/backgroundrb start
/usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:27:in
gem_original_require': no such file to load -- bdrb_config.rb (LoadError) from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:27:inrequire’
from ./script/backgroundrb:14

por lo que entiendo no puede cargar el archivo bdrb_config.rb pero no
se que hacer!!!