我有一种方法可以检查用户是否提交了上个月的时间表,如果没有,则会发送电子邮件提醒。这种方法需要每天运行。任何用户都没有动作实际触发此方法,它只是每天在设定的时间运行。
有关在Rails 3中实现此功能的最佳方法的任何想法吗?
答案 0 :(得分:3)
创建一个rake任务来运行方法+发送电子邮件,并查看可以自动生成cron的gem。
https://github.com/javan/whenever
然后你可以使用以下内容在“config / schedule.rb”创建随时随地的配置文件;
every 1.day, :at => '12:00 pm' do
rake "timesheet:check"
end
答案 1 :(得分:0)
您是否一定需要将此作为rails应用程序的一部分运行?是否可以将其作为自己的服务进行考虑?
如果您可以将此功能从rails应用程序中移出并自行运行,则只需编写ruby脚本并通过cron作业在预定时间执行该脚本。
当涉及到你的rails应用程序时,它可能会变得不必要地混乱,因为你需要一些东西来不断轮询时间,看看是否该时间调用该方法。对于像你这样的任务来说,cron工作总是更容易。
如果您能告诉我您正在使用的操作系统,我很乐意为您指出有助于您设置cron工作的资源。
答案 2 :(得分:0)
看看Resque Scheduler。您可以将cron设置为0 0 * * *
,这将每天运行一次脚本。Here是Resque上的railscast。
答案 3 :(得分:0)
我正在Mac OS X上开发,我们的生产机器在CentOS上,但这也适用于Ubuntu。
我在report.rake中定义了一个rake任务
namespace :report do
desc "Email stats"
task :email_global_stats, [] => :environment do |t, args|
StatsMailer.global_stats_email.deliver
end
end
检查新统计数据然后通过电子邮件发送它的大部分逻辑都在StatsMailer
中定义。然后在生产机器上,我在我的crontab中有这个(通过crontab -e
访问):
30 7 * * * RAILS_ENV=production /usr/local/bin/rake -f /home/user/code/stats/current/Rakefile report:email_global_stats
它设置为早上7:30,这样我就没有一切都在午夜运行。然后我想在本地测试,我只是运行:
rake report:email_global_stats
来自我的开发目录。您还必须通过在Mac OS X上键入它来确保postfix
正在运行:
sudo postfix start