在Rails应用程序中运行异步作业的最佳方法是什么?

我知道有几个插件可以进行异步处理。 哪一个是最好的,为什么?

我所知道的是:

  • BackgrounDRb

如果你可能有几个这样的过程,并且你想排队它们,那么starling和workling看起来很有趣(参见截屏video )。

您可能也会对之前使用rake进行后台处理的截屏video感兴趣,也可能对将来可能会针对同一问题的另一个解决方案感兴趣。

我将把DJ(延迟工作)添加到列表中 – http://blog.leetsoft.com/2008/2/17/delayed-job-dj

github的家伙最近给了一个很好的评论: http : //github.com/blog/197-the-new-queue

某些东西是否是“最佳”解决方案,实际上取决于您试图解决的问题。 在某些情况下,最好的解决方案将是最轻量级的解决方案,在其他最重量级的解决方案中。

BackgroundRb可能是function最全的Rails后台作业处理器,但它也是最复杂的,因此需要更多的投资才能掌握它。 BackgroundRb可以处理大多数用例,从简单到复杂。

我听说过非常好的事情,关于Ara T. Howard的背景工作 (Bj),引用README是Rails的脑死亡简单的零管理后台优先级队列 。 这是一个更轻量级的解决方案,因此对于大多数情况而言可能优于BackgroundRb。

如果你想要的只是一个不经常的离线批处理式处理的解决方案,那么所有Rails应用程序附带的script/runner就足够了。

为了进一步阅读,您可能希望查看Rails Wiki中的 HowToRunBackgroundJobsInRails 。

Resque也可以帮到你。

这是一个非常好的工具,用于创建后台作业,将这些作业放在多个队列中,以后再处理它们。

Github的家伙创造并使用它。

以下文章可以帮助您入门:

http://rubylearning.com/blog/2010/11/08/do-you-know-resque/

Starling + Workling插件很简单。 此外,它使用简单,经过测试和可扩展的Memcached。

BackgrounDRb – 优点:全function,消息传递,缺点:线程(eek – Rails不是线程安全!),复杂

守护进程生成器 – 优点:简单,运行工作,就是这样!,缺点:没有那些奇特的消息传递。

我们用Cron。 易于设置,易于维护,始终有效。

BackgroundRb会吃掉你的大脑。

BackgrounDRb没有线程,它完全基于进程。 它只有一个用户可以使用的线程池function,如果他想同时处理IO绑定任务。

尝试1.1版本,让我(在我的博客上)或邮件列表上了解任何问题。