【问题标题】:Simple task scheduling inside of a Rails appRails 应用程序中的简单任务调度
【发布时间】:2011-01-13 14:48:39
【问题描述】:

是否可以在 Rails 应用程序中设置简单的任务调度?有些代码我想每小时、每天或每周运行一次。我不想将它们分解成单独的脚本,然后我必须通过 cron 作业安排这些脚本。如果我这样做了,那么我必须记得备份脚本,如果我重建服务器,我必须去添加所有的 cron 作业,这对于我的需要来说似乎有点混乱。

我希望我可以在我的 rails 应用程序中的某个地方安排一个作业,并让它们在我想要的时候神奇地运行!有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails cron scheduled-tasks rufus-scheduler


    【解决方案1】:

    我使用延迟作业,“数据库支持的异步优先级队列”来完成类似的事情。看看http://github.com/tobi/delayed_job

    您仍然需要一些启动“rake jobs:work”的东西,但这比拥有许多不同的 cron 作业要好。请注意文档中的 :run_at 属性 - 看起来它可能会解决“在我的 rails 应用程序中的某处安排作业并让它们在我想要它们时神奇地运行”的问题。

    【讨论】:

      【解决方案2】:

      为此有一些 gem/插件,例如 rufus-scheduler 或更流行的“无论何时” gem。我确实喜欢 @douglassellers 的解决方案,但我没有听说过。

      【讨论】:

      • 我是“Whenever”的忠实粉丝,只要确保您的托管解决方案允许您有足够的权限来编辑 crontab。我最近在一个共享托管服务器上启动,我必须使用 Web 界面来安装 crontabs,但无论何时都不适合我。
      • 我如此喜欢 rufus-scheduler 的原因是它可以在您的 Rails 应用程序中运行,并且可以像 crontab 一样进行配置。
      【解决方案3】:

      您可以使用 Rails Cron (gem install rails_cron) 之类的工具来执行此操作,它会衍生出另一个专用于执行计划后台任务的 rails 进程。我建议不要这样做,因为额外的 rails 实例必须与您的应用程序的其余部分一起被监视、停止和启动,并且根据我的经验,它很容易崩溃。

      更好的解决方案是使用 Craken,http://github.com/latimes/craken,通过 Rails 应用程序中的 yaml 文件管理 crontab。每个计划任务都在 yaml 文件中定义,然后在部署时 Craken 决定是否需要更新系统级 CronTab 文件。它直接插入您的 capistrano 部署文件,并且是合理的交钥匙。这提供了在使用 OS 级别的 cron 实际执行计划任务时仍然在 Rails 应用程序中管理计划任务的优势。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-25
        • 2014-11-08
        • 2010-10-13
        • 1970-01-01
        • 1970-01-01
        • 2012-07-31
        相关资源
        最近更新 更多