您建议采用什么方法来实现基于Web的调度程序

时间:2009-07-14 20:37:07

标签: ruby-on-rails web-applications scheduling

我发现我经常需要在我开发的应用程序中实现某种调度程序。应用程序的范围从简单的维护任务到相当复杂的。

到目前为止,我的方法是设置cron作业,基本上对排队命令进行批处理。例如,我让cron每5分钟调用一个脚本(我在RubyOnRails中工作,这是一个运行脚本),它检查是否有任何需要处理的项目,然后将任务委托给适当的处理程序。

这样可行,但出于某种原因并不是最好的方法。你能推荐一些东西,或对此有任何意见吗?

我在Ruby on Rails工作,但没有理由将此讨论仅限于RoR。

谢谢,

3 个答案:

答案 0 :(得分:3)

有很多方法可以做到这一点。对于我们最近开发的一个项目,我们使用了delayed_job,这是Rails的一个优秀的异步工具工具。我们可以将工作设置为每5分钟运行一次,然后该工作在完成后创建另一个工作,依此类推。

其他工具(如BackgroundRB)默认支持cron样式的工作程序。

我经常发现做一个每分钟一次的佣金任务来为delayed_job添加新工作的效果非常好;你可能想尝试一下。它是最具弹性的,可以让你保留Ruby中的所有计时器逻辑,同时不需要丑陋的黑客或可能易碎的设置,比如我最初的delayed_job示例(例如,你必须清除工作队列;你现在必须重新设置所有的工作才能获得它们工作正常)。

Delayed_job非常容易上手,非常易于破解,所以如果你正在寻找一个可以开始的地方,那可能就像任何地方一样好。

答案 1 :(得分:1)

另一个建议是创建自己的自定义守护程序。这将使您可以灵活地执行您需要的任何操作。

优秀的Railscast截屏视频 - http://railscasts.com/episodes/129-custom-daemon

答案 2 :(得分:0)

无法理解你为什么不使用cron和script / runner。好处是你没有总是加载你的(额外需要的)Rails环境,只在你需要运行作业时加载。

缺点是它依赖于cron存在......?