我想安排一个日常任务:每天早上 7 点,我想发送一封电子邮件(无需人工干预)。
我正在研究 RoR 框架,我想知道最好的方法是什么?
我听说过 BackgrounDRB、OpenWFEru 调度程序或基于 Cron 的东西,但我是新手,不明白哪一个是为我的需要而设计的。
我想安排一个日常任务:每天早上 7 点,我想发送一封电子邮件(无需人工干预)。
我正在研究 RoR 框架,我想知道最好的方法是什么?
我听说过 BackgrounDRB、OpenWFEru 调度程序或基于 Cron 的东西,但我是新手,不明白哪一个是为我的需要而设计的。
另一种选择是创建一个由 cron 作业运行的 rake 任务。为此,请创建一个文件some_file.rake
并将其放入您的lib/tasks
文件夹中。您的文件可能如下所示:
导轨 2.x:
task :send_daily_mail, :needs => :environment do
Model.send_daily_mail
end
导轨 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。
我对这篇博文中讨论的rufus-scheduler gem印象深刻(并计划尝试)
他是这样描述的:
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