2010-09-19 52 views
3

我们有一个rails v2.3.8/apache/passenger应用程序&对于一些长时间运行的任务有异步要求。所以我一直在评估围绕rails/ruby​​的一些解决方案,希望得到一些解决方案的反馈。Rails背景/异步任务要求

另外我有一个问题 - 后台任务/工作人员是如何产生的。鉴于我们的导轨应用程序将运行在apache /乘客容器内,这是否意味着背景/工作人员也会产生apache /乘客进程/线程?

是否只有一个工作线程/进程启动,这意味着作业将被连续处理或作业是并行处理?我来自java/j2ee的背景,所以我对Message Beans/threading有很好的理解,但是对于rails消息传递解决方案的工作原理没有任何线索。

一些在此基础上,我们正在评估以下解决方案的参数是 - 性能/规模,分布式的工人(在不同的节点上运行),Rails的V3支持

  • Beanstalkd - >异步观察者

  • 令人吃惊 - > Workling

  • 的ActiveMQ(跺脚) - > Workling/activeMessageing

  • 延迟作业

+0

我很感兴趣看到这个问题的结果。你有没有做出决定,还是仍在寻找? – John 2010-11-08 21:13:17

回答

1

Phusion Passenger只处理Web请求。后台任务最好由外部队列系统处理。你已经提到了其中的一些。这些队列系统作为完全独立的进程运行,不会影响Phusion Passenger管理的任何进程。

+0

谢谢,也感谢您对乘客的工作:) – kapso 2010-09-21 19:36:01

0

我知道这是一个非常晚的答案,但我面临的一些问题可能值得考虑。

随着乘客的智能产卵,所有连接都必须在产生新线程后重置。请参阅http://www.modrails.com/documentation/Users%20guide%20Nginx.html#_smart_spawning_gotcha_1_unintential_file_descriptor_sharing以供参考。

这也包括到队列的连接。请务必使用

PhusionPassenger.on_event(:starting_worker_process) do |forked| 
    if forked 
    ... 
    end 
end if defined?(PhusionPassenger) 

中的相应代码对其进行重置。