Tutorial: Llamar a una función del controlador con cron job

Bueno, veamos… llevo unas horas intentando conseguir que desde cronjob
se llamara a una función que tengo en un controlador. Después de
bastantes pruebas y tal, lo he logrado. Os lo dejaré por aquí, que
supongo que a más de uno le valdrá.

Tenemos una función dentro de cuentas_controller.rb, esta se llama:
alertas1 y envia emails via actionmailer a los usuarios que les va a
expirar su cuenta, por ejemplo

tenemos:
/home/usuario/rails/socios/app/controllers/cuentas_controller.rb

lo que debemos hacer es coger la función alertas1, y pegarla en un
modelo, por ejemplo: cuentis.rb

El modelo contendrá:

----------------->Código<---------------------------

class Cuentis < ActiveRecord::Base

def self.alertas1
"Búsqueda de usuarios"
OrderMailer.deliver_alertas1("configuración de email")
end

end
----------------->Fin Código<---------------------------
Lo entrecomillado va de vuestra cuenta :wink:

bien, ahora sólo hemos de guardar cuentis.rb en:
/home/usuario/rails/socios/app/models/cuentis.rb

y luego poner el cronjob (ejemplo para que se ejecute cada minuto):

----------------->Código<---------------------------

          • /home/usuario/rails/socios/script/runner ‘Cuentis.alertas1’ -e
            development
            ----------------->Fin Código<---------------------------

o test o production, como queráis. Runner pone development por defecto.

Saludos.

El día 1/06/07, Mario M. [email protected]
escribió:> ----------------->Código<---------------------------

          • /home/usuario/rails/socios/script/runner ‘Cuentis.alertas1’ -e
            development
            ----------------->Fin Código<---------------------------

Gracias por la aportación, Mario. Parece que esto de los trabajos
programados en background está de moda en la lista, yo ayer contaba en
mi blog que ahora Boris usa script/runner. Quiero probar otras maneras
como daemon_generator, backroundRb y
OpenWFEru scheduler.

Con script/runner la cosa se resume diciendo que lo que ejecutas es un
método de un modelo, y que con -e indicas el entorno.

Hola jaime.
Yo tenia varías formas pensadas. Probé una página con un boton submit
que llamará a la acción del controlador y con onLoad para que se enviara
al abrir la página. Pero el problema es que en el cron job ni lynx ni
wget ejecutan onLoad. Así que mi solución fue la que puse ahí arriba.
Mucho más profesional, por otra parte xD

Saludos.

El 1/06/07, Mario M. [email protected]
escribió:> Hola jaime.

Yo tenia varías formas pensadas. Probé una página con un boton submit
que llamará a la acción del controlador y con onLoad para que se enviara
al abrir la página. Pero el problema es que en el cron job ni lynx ni
wget ejecutan onLoad. Así que mi solución fue la que puse ahí arriba.
Mucho más profesional, por otra parte xD

Hola Mario, no entiendo para qué necesitas el botón. Supongo que la
acción que quieres ejecutar la puedes poner en la acción del
controlador. Si es una tarea en background, la lógica de tu
aplicacióndebería bastar para apañarse, sin necesidad de un interfaz web no?

En todo caso parece que lo mejor es pensar desde el modelo, no desde
el controlador, para estas cosas. Todo dependerá de cada caso, claro.