【问题标题】:Phusion Passenger + Workling + RabbitMQPhusion 乘客 + 工作 + RabbitMQ
【发布时间】:2009-07-06 21:57:12
【问题描述】:

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

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 完全失败并显示消息:服务器遇到内部错误或配置错误,无法完成您的请求

【问题讨论】:

    标签: ruby-on-rails asynchronous rabbitmq workling


    【解决方案1】:

    编辑:自发布此代码以来,我对以下代码进行了一些改进。可在此处获取:http://www.hiringthing.com/2011/11/04/eventmachine-with-rails.html

    我花了一百万年试图让它发挥作用,最终做到了。这是我的代码:

    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
    

    现在我可以使用了:

    EM.next_tick { AMQP.channel.queue(Q_Q).publish("hi mom") }
    

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

    希望这对某人有所帮助。

    【讨论】:

      【解决方案2】:

      不是一个真正的答案,但除非您致力于 AMQP,否则我建议您使用 https://github.com/defunkt/resque - 它可以很好地完成异步工作 + fork gig。

      【讨论】:

        猜你喜欢
        • 2015-11-17
        • 1970-01-01
        • 2011-12-09
        • 2012-04-27
        • 1970-01-01
        • 1970-01-01
        • 2011-01-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多