2013-04-26 66 views
0

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

有没有办法让EventMachine重新加载代码而不会丢失连接?我想过在一个单独的文件中定义我的ConnectionHandler,然后重装它SIGHUP

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

但这有缺点:

  • 它不重装EventMachine的本身(这是必要的宝石更新的情况下, )
  • 我不知道这是否有效。

有什么建议吗?

+0

看到此链接http://eventmachine.rubyforge.org/ – krishna 2013-08-22 05:03:00

+0

看到这也https://github.com/mockko/livereload/wiki/Building – krishna 2013-08-22 05:04:12

回答

5

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

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

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

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

  4. 把它们放回L.B.与另一半重复。

+0

都能跟得上。只有一台机器。独角兽可以进行零停机时间部署(如下所示:http://ariejan.net/2011/09/14/lighting-fast-zero-downtime-deployments-with-git-capistrano-nginx-and-unicorn/)。必须有一种方法让事件机器在运行时重新加载代码... – iblue 2013-08-15 14:40:18

+0

我意识到这不完全是你想到的,是的。尽管如此,从我的经验来看,这是一件好事。如果你想要的东西甚至接近100%的正常运行时间,反正你需要多台机器。如果您只有一台计算机,则可以在不同端口上运行2个EventMachine进程,并使用ngnix例如在端口80上负载均衡。 – 2013-08-15 18:05:53

+4

对此答案+1。您的目标是100%的正常运行时间,但对您的资源分配不合理。如果您的服务器崩溃,电源熄灭或者某些不可预见的事件导致网站停工,会发生什么情况?您可以在任何服务器配置上实现100%的正常运行时间。考虑到您的选择,支持网站多个实例的负载均衡器是首选的方式。 – jbearden 2013-08-20 17:57:30