2010-02-05 29 views
3

有没有办法在Rails应用程序内设置简单的任务调度?我想每小时运行一段代码,或者每天或每周运行一段代码。我不想将它们分解成单独的脚本,然后我必须通过cron作业进行安排。如果我这样做了,那么我必须记得备份脚本,如果我重建了一台服务器,我必须重新添加所有的cron作业,这对我所需要的东西来说似乎有点麻烦。在Rails应用程序内调度简单的任务

我希望我可以安排在我的导轨应用程序的某个地方工作,让他们神奇地运行,当我想他们!有任何想法吗?

回答

3

有这样的宝石/插件,如rufus调度程序或更流行的'每当'宝石。尽管我确实喜欢@douglassellers的解决方案,但我还没有听说过。

+0

我非常喜欢'每当',只要确保您的托管解决方案允许您有足够的权限编辑crontab。我最近在一个共享主机服务器上启动,我不得不使用Web界面来安装crontabs,并且每当我没有为我工作时。 – 2010-02-05 17:58:52

+1

我非常喜欢rufus-scheduler的原因是它可以在Rails应用程序中使用,并且可以像crontab一样进行配置。 – Trevoke 2010-02-05 18:28:12

0

您可以使用像Rails Cron(gem install rails_cron)这样的工具来完成此操作,该工作将关闭另一个专门用于执行预定后台任务的Rails进程。我建议不要这样做,因为额外的rails实例将不得不被监视并停止,并与您的其他应用程序一起启动,并且根据我的经验,它很容易掉下来。

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

1

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

你仍然需要一些能够启动'rake jobs:work'的东西,但它比拥有许多不同的cron作业要好。在文档中注意:run_at属性 - 看起来像它可能会解决“安排我的Rails应用程序中某处的作业,让它们在我希望它们出现问题时魔法般运行”。

相关问题