0

我正在使用 ruby​​ splash gem(使用 Capistrano 作为其部署机制)执行命令以在远程 Ubuntu 服务器上启动一个简单的 ruby​​ 应用程序。下面是我认为问题所在的 ruby​​ 应用程序代码的一小段。

...
require 'eventmachine'
...
fork { run }

def run
    EM.run{
        Signal.trap('INT') { @log.debug("trapped INT signal"); stop(true) }
        Signal.trap('TERM'){ @log.debug("trapped TERM signal"); stop(true) }

        begin 

            pulsate
            @log.info "still ok here"
            EM.add_periodic_timer 60 do  # 1 minute
                @log.info "doesn't get here"                    
                pulsate
            end
            @log.info "doesn't get here"

        rescue => exc
            #never gets here    
            @log.error "Unable to add EM timer due to: #{exc}"
            exit -1
        end  
    }
end 

def pulsate...
def stop...
etc
...

奇怪的是,当我 ssh 到服务器并在那里运行时,它运行起来没有任何问题。但是,当使用洒/capistrano 时,只要该过程到达EM.add_periodic_timer,它就会消失。没有抛出异常,没有信号,没有日志输出,它似乎永远不会进入下一行?

另外,我正在使用最新版本的 EventMachine gem:eventmachine (1.0.0.rc.4) 和 capistrano (2.12.0)

关于为什么它在远程执行期间可能会失败但在服务器上执行时不会失败的任何想法?我可以尝试获取更多信息的任何想法?

4

1 回答 1

0

在调用 EM.run 之前尝试设置全局 EM 错误处理程序。您可以在EM#error_handler上查看文档,这可能会为您提供有关正在发生的事情的线索。

于 2012-09-11T02:54:56.620 回答