我正在使用ruby撒播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到服务器并在那里运行它时,它都运行没有任何问题。但是当使用sprinkle / capistrano时,只要进程击中 EM.add_periodic_timer ,它就会消失。抛出没有异常,没有信号,没有日志输出,它似乎永远不会到达下一行?
另外,我正在使用最新版本的EventMachine gem:eventmachine(1.0.0.rc.4)和capistrano(2.12.0)(我认为它是一个红色的鲱鱼,因为它只是落在了capistrano上)< / p>
有关为何在远程执行期间失败但在服务器上执行时无法解决的任何想法?我可以尝试获取更多信息的任何想法吗?