我想安排一个每天定时任务:每天早上7点发送一封电子邮件(无需人为干预)。
我正在使用RoR框架开发,并想知道最佳方法是什么?
我听说过BackgrounDRB、OpenWFEru调度器或基于Cron的工具,但作为新手,我不理解哪个适合我的需求。
我想安排一个每天定时任务:每天早上7点发送一封电子邮件(无需人为干预)。
我正在使用RoR框架开发,并想知道最佳方法是什么?
我听说过BackgrounDRB、OpenWFEru调度器或基于Cron的工具,但作为新手,我不理解哪个适合我的需求。
另一种选择是创建一个由定时任务运行的rake任务。为此,请创建一个文件some_file.rake
并将其放在lib/tasks
文件夹中。您的文件可能如下所示:
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
然后使用定时任务(cron)根据您的需要执行它:
cd /path/to/app && /usr/bin/rake send_daily_mail
请注意,如果您的应用程序默认处于开发模式,您可能需要在crontab中放置RAILS_ENV=production
。
scheduler = Rufus::Scheduler.start_new
scheduler.every("1m") do
DailyDigest.send_digest!
end
看起来很简单。我想知道添加基于HTML的配置有多容易?
BackgroundRB是我使用的工具,它非常完美。我有多个电子邮件通过BackgroundRB发送和生成。我还有其他任务。因为它可以同时启用定时任务和异步任务(需要比普通的客户端/服务器响应周期更长的任务)。
我使用它并且非常满意。
./script/runner "MyModel.send_daily_mail" RAILS_ENV=production
确保一切正常运作。如果是这样,我们需要通过正确设置项目路径来使命令通用。
cd /path/to/my/rails/project && ./script/runner "MyModel.send_daily_mail" RAILS_ENV=production
现在切换到任何随机目录并运行该命令。如果它正常运行,请运行crontab -e
并在其中设置每天早上7点运行的命令。如果你谷歌一下,关于cron格式的解释有很多,应该很容易弄清楚。
跟随接受的答案,使用 rake 任务和 cron 作业。但是,请注意更新cron文件本身是一项手动任务。如果您在开发过程中进行更改,则可能没事。否则,这里是如何让 Capistrano 为您执行该操作的:http://push.cx/2008/deploying-crontab-with-your-rails-app