Rails - 异步任务,分叉进程,最佳实践

时间:2010-03-30 17:05:13

标签: ruby-on-rails ruby rubygems

我在课堂上使用Observer。当创建/更新其中一条记录时,我需要不通过其他服务(通过URL调用)。为避免减慢课程速度,最好的方法是什么?使用gem喜欢delayed_job是否有点矫枉过正?

在我的Observer的after_update()/ after_create()中,我只想启动一个调用URL的线程......

2 个答案:

答案 0 :(得分:2)

如果你的通知程序是非线程阻塞的,你可以简单地生成一个线程并在那里执行通知。这样,当该线程等待响应时,您的程序将继续运行。

当然,你需要一些方法来处理失败。您可以尝试三次,如果仍然失败,请向日志或其他内容写一个通知。

最好(最可靠)的解决方案是使用作业队列。这样,如果作业彻底失败,您可以再次检查并重新提交作业。

答案 1 :(得分:2)

绝对使用社区支持/接受的gem,如delayed_job或resque。这真的不像你想象的那么难,你的应用程序会更好地扩展。