ruby-on-rails - ejemplos - programar en ruby on rails
¿Cuál es la mejor manera de programar una tarea de envío de correo electrónico con Ruby on Rails? (5)
Agregue un método de clase a uno de sus modelos que lo manejará por usted. Ahora intenta ejecutar ese método usando el script runner
./script/runner "MyModel.send_daily_mail" RAILS_ENV=production
Asegúrate de que todo funcione bien. Si lo hace, entonces tenemos que hacer que el comando funcione universalmente configurando la ruta al proyecto correctamente.
cd /path/to/my/rails/project && ./script/runner "MyModel.send_daily_mail" RAILS_ENV=production
Ahora cambie a cualquier dirección aleatoria y ejecute ese comando. Si se ejecuta correctamente, ejecute crontab -e
e inserte el comando allí configurado para que se ejecute diariamente a las 7 AM. Hay un montón de explicaciones sobre el formato cron allí si buscas para ellos y debería ser bastante simple de entender.
Me gustaría programar una tarea diaria: todos los días a las 7 AM, quiero que se envíe un correo electrónico (sin intervención humana).
Estoy trabajando en el marco RoR y me pregunto cuál es la mejor manera de hacerlo.
Escuché sobre BackgrounDRB, el programador de OpenWFEru o cosas basadas en Cron, pero soy novato y no entiendo cuál está hecho para mi necesidad.
BackgroundRB es lo que uso y funciona perfecto. Tengo varios correos electrónicos enviados, generados por BackgroundRB. También tengo otras tareas también. Porque habilita tareas programadas y tareas asincrónicas (tareas que toman más tiempo que el ciclo de respuesta cliente / servidor normal).
Lo uso y estoy muy feliz con eso.
Me impresionó (y planeo intentarlo) la gema rufus-scheduler discutida en esta publicación de blog
Él describe algo como esto:
scheduler = Rufus::Scheduler.start_new
scheduler.every("1m") do
DailyDigest.send_digest!
end
..que parece bastante simple. Me pregunto qué tan fácil sería agregar una configuración basada en HTML.
Vaya con una tarea de rake y un trabajo de cron, como ya lo dice la respuesta aceptada. Sin embargo, tenga en cuenta que la actualización del archivo cron en sí es una tarea manual. Eso puede estar bien si no lo estás cambiando durante el desarrollo. De lo contrario, aquí puedes dejar que Capistrano lo haga por ti: http://push.cx/2008/deploying-crontab-with-your-rails-app
Otra opción es crear una tarea de rake que ejecute un trabajo cron. Para hacerlo, cree un archivo some_file.rake
y póngalo en su carpeta lib/tasks
. Su archivo puede verse así:
Rails 2.x:
task :send_daily_mail, :needs => :environment do
Model.send_daily_mail
end
Rails 3.x:
task :send_daily_mail => :environment do
Model.send_daily_mail
end
Luego use cron para ejecutarlo tantas veces como desee:
cd /path/to/app && /usr/bin/rake send_daily_mail
Tenga en cuenta que es posible que necesite poner RAILS_ENV=production
en su crontab si su aplicación está en modo de desarrollo por defecto.