【问题标题】:Running slow tasks asynchronously in Rails?在 Rails 中异步运行慢任务?
【发布时间】:2010-12-16 18:03:55
【问题描述】:

我正在开发一个 Rails 2.3.x 应用程序,它需要异步运行一个漫长而缓慢的任务。

延迟请求直到处理完成有点痛苦。我们很高兴向客户发送“好的,我们已经收到,我们正在处理”式的回复,然后在客户离开后就开始工作。

所以我已经看到了一些执行此操作的方法(例如分叉或使用 cron),但似乎任务队列系统可能是一个更好的主意。

似乎三个主要是:

Sparrow 看起来特别有趣,因为它支持 Memcached,但我不想在没有做出明智决定的情况下只选择一个。有人对最佳实践有任何见解吗?我很想听听您在上述方面的经验,尤其是这种方法或提到的库的任何主要问题。也许有更好的方法来做到这一点,但我完全错过了?

就这样:Rails 3.x 现在不是一个选项,这需要适用于 Rails 2.3.x。

谢谢!

【问题讨论】:

  • 也可以试试:navvy 和 delayed_job 对他们都有很好的经验,但没有什么特别的见解
  • 你总是可以自己写。根据我的经验,这样做你会更好地理解你自己的问题以及解决方案,它会完全满足你的需要。比起阅读其他人对自己略有不同的问题的解决方案,这比花时间更好。

标签: ruby-on-rails ruby asynchronous


【解决方案1】:

我推荐delayed_job,特别是this fork and branch。我自己在 rails 2.3.5 上使用它,效果很好。

它有一个 rails 3 分支,当你想升级时,它可以与多个后端一起工作,并且它有一个可选的漂亮语法:

Notifier.delay.deliver_signup @user

顺便说一句,只分叉是一个错误,因为您会发现分叉没有良好的数据库连接。

【讨论】:

  • 嘿,感谢您的洞察力。 :) 使用 2.0.0 超过 2.0.5 有什么特别的原因吗?
  • 我链接到的分支是用于 rails 2 并且具有 2.0.x 版本,因此请使用最新版本 - 目前是 2.0.5。如果您使用的是 bundler(好招),您可以通过说“gem delayed_job, '~>2.0.5'”来指定最新的 2.0.x 系列,这将匹配 2.0.6、2.0.12 等。
猜你喜欢
  • 1970-01-01
  • 2010-10-25
  • 2018-09-12
  • 1970-01-01
  • 2012-04-01
  • 2014-03-31
  • 2016-10-05
  • 2020-04-24
相关资源
最近更新 更多