代码之家  ›  专栏  ›  技术社区  ›  Damien MATHIEU

常规延迟作业

  •  7
  • Damien MATHIEU  · 技术社区  · 15 年前

    我在用延迟的工作来管理背景工作。
    但是,我有一些任务需要定期执行。例如,每小时、每天或每周。

    现在,当我执行任务时,我创建了一个新的任务,将在一天/周/月内执行。

    但是我不太喜欢。如果出于任何原因,任务没有完全执行,我们不会创建下一个任务,我们可能会丢失任务的执行。

    如何在Rails应用程序中管理这类事情(包括延迟的工作),以确保常规任务列表保持正确?

    2 回复  |  直到 15 年前
        1
  •  5
  •   Mike H    15 年前

    如果你可以访问cron,我强烈建议

    http://github.com/javan/whenever

    您可以在Dead Simple Ruby中指定要运行的内容和频率,以及每当提供rake任务时将其转换为crontab并更新系统的crontab。

    如果你没有机会接触到频繁的亲信(就像我没有,因为我们在Heroku),那么DJ就是你的出路。

    你有几个选择。

    1. 做你正在做的。DJ会对每一项任务重试一定次数,所以您在这方面有一些宽容。

    2. 将创建下一个DJ作业的代码放在一个确保块中,以确保即使在发生异常或其他错误事件后也能创建该作业。

    3. 创建另一个定期运行的DJ,检查以确保存在合适的DJ,如果不存在,则创建它们。当然,这与其他选项一样容易出错,因为监视器和实际DJ都在相同的环境中运行,但这是有意义的。

        2
  •  1
  •   Milan Novota    15 年前

    有没有什么特别的原因,为什么你不使用cron的这类事情? 或者更像是红色的东西 rufus-scheduler ,相当不错 easy to use 而且非常可靠。

    如果你不需要排队,我想这些工具是一种方法。