3

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

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

4

3 回答 3

3

有这方面的 gems/plugins,比如 rufus-scheduler 或更流行的“whenever” gem。我确实喜欢@douglassellers 的解决方案,但我没有听说过。

于 2010-02-05T17:54:00.127 回答
1

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

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

于 2010-02-06T00:24:12.880 回答
0

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

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

于 2010-02-05T17:26:25.667 回答