我想安排每日任务:每天早上7点,我想要发送一封电子邮件(无需人工干预)。使用Ruby on Rails安排发送电子邮件任务的最佳方式是什么?
我正在研究RoR框架,我想知道什么是最好的方法来做到这一点?
我听说过BackgrounDRB,OpenWFEru调度程序或基于Cron的东西,但我是一个新手,不明白哪一个是为我的需要而设计的。
我想安排每日任务:每天早上7点,我想要发送一封电子邮件(无需人工干预)。使用Ruby on Rails安排发送电子邮件任务的最佳方式是什么?
我正在研究RoR框架,我想知道什么是最好的方法来做到这一点?
我听说过BackgrounDRB,OpenWFEru调度程序或基于Cron的东西,但我是一个新手,不明白哪一个是为我的需要而设计的。
另一种选择是创建一个由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
请注意,如果您的应用程序默认处于开发模式,您可能需要将RAILS_ENV=production
放在您的crontab中。
将一个类方法添加到您的模型之一,将为您处理这个。现在尝试使用亚军脚本执行该方法
./script/runner "MyModel.send_daily_mail" RAILS_ENV=production
确保一切正常。如果确实如此,那么我们需要通过正确设置项目的路径来使命令正常工作。
cd /path/to/my/rails/project && ./script/runner "MyModel.send_daily_mail" RAILS_ENV=production
现在转到任何随机directiry并运行该命令。如果运行正常,请运行crontab -e
并在该设置中插入该命令,以在每日上午7点运行。关于那里的cron格式有很多的解释,如果你是谷歌的,并且应该很容易弄清楚。
非常感谢你的回答。是否有可能从特定的文件(如lib/tasks/send_mail.rb)而不是在模型的方法中进行管理? – Flackou 2009-02-16 16:02:13
我留下深刻印象(并计划尝试)的rufus-scheduler宝石讨论in this blog post
他描述是这样的:
scheduler = Rufus::Scheduler.start_new
scheduler.every("1m") do
DailyDigest.send_digest!
end
..这看起来很简单。我想知道添加基于HTML的配置是多么容易?
是吗?你试过了,你觉得怎么样? – 2010-05-07 17:41:13
BackgroundRB是我使用的,它的工作原理非常完美。我有几封电子邮件正在发送,由BackgroundRB生成。我也有其他的任务。因为它启用了计划任务和异步任务(比普通客户机/服务器响应周期花费的时间更长的任务)。
我使用它,我很满意它。
使用耙子任务和cron工作,正如接受的答案已经说过。但是请注意,更新cron文件本身是一项手动任务。如果你在开发过程中没有改变它,这可能没问题。否则,在这里如何让Capistrano为你做到这一点:http://push.cx/2008/deploying-crontab-with-your-rails-app
我有一个奇怪的问题: 当我从命令行执行“cd/path/to/app &&/usr/local/bin/rake send_daily_mail”时,它可以工作。但是,当crontab尝试执行它时,我在`require'中有'/ usr/local/bin/rake:9'错误:无需加载此文件 - 来自/ usr/local/bin/rake的rubygems(LoadError) :9“ – Flackou 2009-02-17 10:52:33