如何用cron运行一次rake任务两次?

时间:2013-01-23 17:00:01

标签: ruby-on-rails ruby ruby-on-rails-3 rubygems ruby-daemons

我想知道在RoR中是否有办法在不同的时间运行一次rake任务或ruby代码两次。例如,当用户注册时,在三天后运行任务,然后在一周后运行相同的任务,但不再执行(“停止进程”)。我正在寻找像Resque,Stalker,Starling等的crontab和宝石,但我不清楚这些宝石可以帮助我。我正在考虑为每个用户运行一个守护进程并计算任务执行。问题是该守护进程在所有时间都“活动”资源。有没有办法尽可能少地使用资源?我想稍后在Heroku中运行它。

3 个答案:

答案 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是特定于主机的,因此如果您正在运行群集,可能不合适,尤其是如果主机可能是暂时的。