EventMachine& Live Reload

时间:2013-04-26 09:41:21

标签: ruby eventmachine

我正在运行一个使用eventmachine的守护进程。它必须具有100%的正常运行时间,即使我重新部署代码也是如此。所以我正在寻找零停机时间部署。

有没有办法让EventMachine重新加载代码而不会丢失连接?我考虑在单独的文件中定义ConnectionHandler,然后在SIGHUP上重新加载:

Signal.trap("HUP") do
  load "#{path}/connection_handler.rb"
end

但这有缺点:

  • 它不会重新加载EventMachine本身(在宝石更新的情况下需要)
  • 我不知道这是否有效。

有什么建议吗?

1 个答案:

答案 0 :(得分:5)

使用负载均衡器。在每次部署时:

  1. 从负载均衡器中取出一半机器。

  2. 等待他们完成处理他们当前的请求。

  3. 在这些机器上取下E.M.并部署新代码。

  4. 将它们放回L.B.游泳池和另一半重复。