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

时间:2008-09-23 22:39:25

标签: ruby-on-rails asynchronous

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

我所知道的是:

8 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:8)

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

您可能也会对使用rake进行后台处理的previous screencast以及将来可能会针对同一问题的另一个解决方案感兴趣。

答案 2 :(得分:7)

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

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

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

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

如需进一步阅读,您可能需要查看HowToRunBackgroundJobsInRails中的Rails Wiki

答案 3 :(得分:4)

Resque也可以帮到你。

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

Github的家伙创造并使用它。

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

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

答案 4 :(得分:3)

BackgrounDRb - 优点:全功能,消息传递,缺点:线程化(eek - Rails不是线程安全的!),复杂

Daemon Generator - 优点:简单,运行工作,就是这样!,缺点:没有那些奇特的消息传递。

答案 5 :(得分:3)

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

答案 6 :(得分:1)

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

BackgroundRb会吃掉你的大脑。

答案 7 :(得分:0)

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

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