2013-04-26 64 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