我想知道在RoR中是否有办法在不同的时间运行一次rake任务或ruby代码两次。例如,当用户注册时,在三天后运行任务,然后在一周后运行相同的任务,但不再执行(“停止进程”)。我正在寻找像Resque,Stalker,Starling等的crontab和宝石,但我不清楚这些宝石可以帮助我。我正在考虑为每个用户运行一个守护进程并计算任务执行。问题是该守护进程在所有时间都“活动”资源。有没有办法尽可能少地使用资源?我想稍后在Heroku中运行它。
答案 0 :(得分:1)
我通常使用记录上的日期列来解决此类事情(例如,first_reminder_sent_at,user_responed_at,week_reminder_sent_at)。在这种情况下,第一个项目的日期,用户的响应以及一周后的项目。
创建一个cron任务来调用rake任务 - 查看所有>的用户3天,< 1周,用户未回复,未设置日期。 排队后台工作。 作业将发送邮件(或任何任务),然后在记录上设置日期字段。
调用rake任务的Cron任务 - 查看所有>的用户1周大,用户未回复且未设置日期。 发送提醒并在后台作业中设置日期。
答案 1 :(得分:0)
尝试每当cron并创建一个rake任务,这正在做你的东西......并在数据库中创建一些触发器字段,以及rake任务应该如何执行他的操作..
答案 2 :(得分:0)
Posix系统具有at
命令,这是将作业安排在以后运行一次的简单方法。虽然使用基于应用程序的排队机制来安排后续工作没有任何问题,如其他答案中所述。 at
是特定于主机的,因此如果您正在运行群集,可能不合适,尤其是如果主机可能是暂时的。