在Rails应用程序内部进行简单的任务调度

时间:2010-02-05 17:12:50

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

有没有在rails应用程序内部设置简单的任务调度?我希望每小时,每天或每周运行一些代码。我不想将它们分成单独的脚本,然后我必须通过cron作业安排。如果我这样做,那么我必须记住备份脚本,如果我重建服务器,我必须去添加所有cron作业,它似乎有点混乱我所需要的。

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

3 个答案:

答案 0 :(得分:3)

有这样的宝石/插件,比如rufus-scheduler或更受欢迎的'随时'宝石。我喜欢@douglassellers的解决方案,但我没有听说过。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

你可以使用类似Rails Cron(gem install rails_cron)之类的东西来完成这项工作,这会转移另一个专门用于执行预定后台任务的rails进程。我建议不要这样做,因为额外的rails实例必须被监视和停止,并与你的应用程序的其余部分一起启动,根据我的经验,很容易摔倒。

更好的解决方案是使用Craken http://github.com/latimes/craken通过rails应用程序中的yaml文件管理crontabs。每个计划任务都在yaml文件中定义,然后在部署时Craken决定是否需要更新系统级CronTab文件。它插入你的capistrano部署文件,并且是合理的交钥匙。这样可以在使用操作系统级别的cron实际执行时,仍然可以在rails应用程序中管理计划任务。