your updated rails not cronjobs converted above ruby-on-rails ruby passenger task

ruby-on-rails - updated - whenever gem



Tareas recurrentes en una aplicaciĆ³n de Ruby On Rails: Cron u otra? (6)

Hay una variedad de soluciones. Para la configuración más sencilla, puedes usar script/runner en tu crontab algo así:

10 0 * * * /home/myuser/myproject/script/runner -e production ModelName.methodname

Methodname debe ser un método estático en tu modelo. Debe hacer referencia al proyecto por una ruta completa, de lo contrario no se encontrará probablemente en el entorno cron. Si no está familiarizado, consulte la página de manual de crontab para obtener información sobre la sintaxis de crontab. Lo anterior, por ejemplo, ejecuta el script en el minuto 10 de la hora 0 de cada día (a las 12:10 am, en breve).

Si necesita una solución más potente, puede utilizar BackgroundRB . BackgroundRB ejecuta un demonio y admite tareas que programan, y puede poner resultados en una base de datos. Incluso tienen un protocolo de comunicación simple para permitir que sus procesos web soliciten que se complete una tarea, y luego tienen una manera de recuperar el resultado. Esto le permite controlar los trabajos en segundo plano directamente desde la interfaz web, en lugar de un crontab que simplemente "sucede".

Se necesita un poco más de configuración para que funcione BackroundRB, pero puede valer la pena si es necesario controlar los trabajos.

Actualmente estoy escribiendo una aplicación que extrae nueva información de fuentes RSS y tiene que actualizar esas fuentes RSS con cierta frecuencia. Actualmente, solo obtengo información cuando el usuario solicita un feed, pero quiero cambiar ese comportamiento a recuperación periódica automática.

Estaba escribiendo un shellscript que interactuaba con la base de datos y se iniciaba periódicamente a través de cron, pero esto es un esfuerzo doble, así que me preguntaba qué sería "Rails Way" o "Ruby Way" para hacer esto. Estoy usando Ubuntu, Apache y Passenger. ¿Puede sugerir mejores métodos que quizás incluso estén incluidos en la aplicación, para poder implementar la aplicación fácilmente en otra máquina sin tener que mezclarme con cron?


Para equipos pequeños y proyectos personales, la joya cuando sea grande. Pero si su empresa tiene un equipo de operaciones independiente del equipo de desarrollo, puede que no sea lo ideal.

En mi último trabajo, el equipo de operaciones necesitaba poder ver el cron que estábamos instalando para que pudieran estar seguros de que no tendría ningún efecto secundario para el sistema. Así que una solución DSL no iba a funcionar. Pero nosotros (los desarrolladores) queríamos los scripts cron en el control de versiones.

Así que para comprometernos, verificamos los archivos de texto con el cron en bruto, similar a esto:

10 0 * * * cd /path/to/rails/app && rake RAILS_ENV=production admin:rss

Y agregamos un paso al script capistrano que lo instaló en el crontab como parte del despliegue.


Prueba la configuración de webmin en tu servidor. Si su sitio alojado lo proporciona. Ir a la siguiente URL mencionada. Es fácil de configurar y fácil de usar.

URL es:

http://your_ip_address:10000/

He usado esto en muchas de mis aplicaciones, me ha funcionado para programar trabajos cron.


Recomiendo una combinación de los dos anteriores. Desea una tarea de rake, incluso si ya tiene un método directo creado. Esto se debe a que las cosas del administrador del servidor que desea ejecutar en cron, es posible que también desee ejecutarlas desde la línea de comandos de vez en cuando, y para eso sirven las tareas de rake.

El complemento cuando suena bien, aunque no puedo responder por él. Por supuesto, es bueno saber cómo hacer las cosas desde cero, y luego usar complementos para hacer su vida más fácil. Aquí está la forma desde cero

Crea un nuevo archivo, lib/tasks/admin.rake

En el interior, crea la tarea en sí:

namespace :admin desc "Updates all RSS feeds" task :rss => :environment do RssFeed.update_all end end

Esto supone que tienes una clase RssFeed y que el método update_all hace lo que esperas. Puedes llamar a esto desde la línea de comando:

rake admin:rss

Y puede agregar esto a cron (llamando a crontab -l como usuario de la web) y agregando esta línea:

10 0 * * * cd /path/to/rails/app && rake RAILS_ENV=production admin:rss


Trate de usar whenever . Aunque finalmente se creará un cron, pero la definición de programación se escribirá dentro de su aplicación usando Ruby DSL.


Yo sugeriría hacer algo como una tarea de rake y usar la gema cada vez que genere su trabajo cron para ejecutar la tarea de rake.

Echa un vistazo, http://railscasts.com/episodes/164-cron-in-ruby , para obtener más información sobre la gema de whenver.

El principal beneficio de la gema de cuando es que mantiene los requisitos de su aplicación (es decir, el trabajo cron que se ejecuta cada x horas, en la aplicación) dentro de su aplicación, lo que aumenta la portabilidad de su aplicación.