Rails后台/异步任务要求

时间:2010-09-19 21:10:37

标签: ruby-on-rails passenger asynchronous

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

我还有一个问题 - 关于后台任务/工人如何产生的问题。鉴于我们的rails应用程序将在apache / passenger容器内运行,这是否意味着后台/工作人员还会产生一个apache / passenger进程/线程?

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

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

  • Beanstalkd - >异步观察者

  • 惊吓 - > Workling

  • ActiveMQ(stomp) - > Workling / activeMessageing

  • 延迟工作

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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)

块。