首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Phusion乘客+工作+ RabbitMQ

Phusion乘客+工作+ RabbitMQ
EN

Stack Overflow用户
提问于 2009-07-06 21:57:12
回答 2查看 1.5K关注 0票数 1

我正在尝试部署一个执行一些异步任务的RoR应用程序。我对此使用了工作,消息队列是RabbitMQ。这种组合在Starling上工作得无懈可击,但我们决定更改Rabbit的MQ。我在某处读到,我应该在environment.rb中包含以下代码

代码语言:javascript
复制
require 'mq' 
if defined?(PhusionPassenger) 
  PhusionPassenger.on_event(:starting_worker_process) do |forked| 
    if forked 
      if EM.reactor_running? 
        EM.stop_event_loop 
        EM.release_machine 
        EM.instance_variable_set( '@reactor_running', false ) 
      end 
      Thread.current[:mq] = nil 
      AMQP.instance_variable_set('@conn', nil) 
    end 
    th = Thread.current 
    Thread.new{ 
      AMQP.connect(:host => 'localhost'){ 
        th.wakeup 
      } 
    } 
    Thread.stop 
  end 
end 

但现在Apache完全失败,并显示以下消息:服务器遇到内部错误或配置错误,无法完成您的请求

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-13 09:00:58

编辑:自从发布了这篇文章后,我对下面的代码进行了一些改进。可在此处获得:http://www.hiringthing.com/2011/11/04/eventmachine-with-rails.html

我花了几百万年的时间试着让它起作用,最终还是成功了。下面是我的代码:

代码语言:javascript
复制
require 'amqp'
module HiringThingEM
  def self.start
    if defined?(PhusionPassenger)
      PhusionPassenger.on_event(:starting_worker_process) do |forked|
      if forked && EM.reactor_running?
          EM.stop
      end
      Thread.new {
      EM.run do
         AMQP.channel ||= AMQP::Channel.new(AMQP.connect(:host=> Q_SERVER, :user=> Q_USER, :pass => Q_PASS, :vhost => Q_VHOST ))
      end
      }
      die_gracefully_on_signal
      end
    end
  end

  def self.die_gracefully_on_signal
    Signal.trap("INT")  { EM.stop }
    Signal.trap("TERM") { EM.stop }
  end
end

HiringThingEM.start

现在我可以使用:

代码语言:javascript
复制
EM.next_tick { AMQP.channel.queue(Q_Q).publish("hi mom") }

在我的Rails应用程序的控制器中。

希望这对某些人有帮助。

票数 1
EN

Stack Overflow用户

发布于 2011-03-04 21:21:32

不是一个真正的答案,但除非你致力于AMQP,否则我会推荐使用https://github.com/defunkt/resque -它可以很好地完成异步任务+分支任务。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1089391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档