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