我正在使用 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)
关于为什么它在远程执行期间可能会失败但在服务器上执行时不会失败的任何想法?我可以尝试获取更多信息的任何想法?