我想知道RoR中是否有办法在不同时间运行两次耙子任务或Ruby代码。例如,当用户注册时,三天后运行任务,然后在一周后运行相同的任务,但不再运行("停止进程")。我正在寻找 crontab 和宝石,如 Resque、潜行者、椋鸟等,但我不清楚这些宝石可以帮助我。我正在考虑为每个用户运行一个守护程序并计算任务执行次数。问题是守护进程将一直处于活动状态,"吞噬"资源。有没有办法使用尽可能少的资源?我想稍后在 Heroku 中运行它。
我通常使用记录上的日期列(例如first_reminder_sent_at,user_responed_at,week_reminder_sent_at)来解决此类问题。 在本例中,第一项的日期、用户的响应以及一周后项的日期。
创建一个 cron 任务来调用 rake 任务 - 查看 3 天、<1 周、用户未响应、日期未设置>所有用户。将后台作业排队。作业将发送邮件(或任何任务),然后在记录上设置日期字段。
用于调用耙任务的 Cron 任务 - 查看 1 周前用户未响应且未设置日期>所有用户。发送提醒并在后台作业中设置日期。
尝试 whenever cron 并创建一个 rake 任务,它正在做你的事情......并在数据库中制作一些触发字段,何时以及如何做他的动作。
Posix系统具有at
命令,这是一种安排作业稍后运行一次的简单方法。尽管使用基于应用程序的排队机制来安排以后的工作并没有错,如其他答案中所述。 at
特定于主机,因此可能不适合运行群集,尤其是在主机可能是暂时性的时。