2010-06-18 187 views
4

我有一個目錄分發給5個服務器的python程序,類和包。看來我不斷地增加更多的服務器,現在我只是從我的本地盒子到服務器做一個基本的rsync。跨服務器分發代碼的最佳方式是什麼?

在n個服務器上分發代碼的更好方法是什麼?

感謝

回答

1

首先,請務必保留所有的代碼版本控制下(如果你還沒有這樣做),這樣就可以從倉庫檢出,而不必複製代碼的新版本它從您的工作站到服務器。

使用版本控制,您可以使用諸如Capistrano之類的工具自動檢出每臺服務器上的代碼,而無需登錄每臺機器並進行手動結賬。

有了這樣的設置,部署一個新版本的所有服務器可以從本地機器上運行

$ cap deploy 

一樣簡單。

4

我用Mercurialfabric來部署所有的源代碼。 Fabric是用python編寫的,所以你很容易就可以開始使用。更新生產服務與fab production deploy一樣簡單。結束ups做這樣的事情:

  1. 關閉所有的服務,並把「升級進度」頁。
  2. 更新源代碼目錄。
  3. 運行所有遷移。
  4. 啓動所有服務。

看到這一切都自動發生,真是太棒了。

+0

'fabric' - 我一直在尋找這個我的整個成年生活。 – 2010-06-19 12:12:22

0

雖然我也使用版本控制來做到這一點,但您可能考慮的另一種方法是使用主機系統使用的任何軟件包管理(例如RPM或dpkgs)打包源文件,並將系統設置爲使用自定義存儲庫然後,「apt-get upgrade」或「yum update」將更新系統上的軟件。然後你可以使用諸如「mussh」之類的東西來運行所有工具上的stop/update/start命令。

理想情況下,您應先將其推送到「測試」存儲庫,讓您的分段系統安裝它,並且一旦您的測試已經簽署,您就可以將其移至生產存儲庫。

這與一般使用結構或版本控制的建議非常相似,只是另一種可能更適合某些人的替代方案。

使用軟件包的缺點是您可能使用版本控制,您必須管理這些軟件包的版本號。我在版本控制中使用修訂標記來完成此操作,因此我可以在目標系統上輕鬆地執行「svn update」或類似操作。

無論哪種情況,您都需要考慮從一個版本遷移到下一個版本。如果用戶加載包含對其他元素的引用的頁面,則會執行更新並且這些元素消失,那麼您會做什麼?您可能希望在部署腳本中執行某些操作,或者在代碼中先用新頁面推出某個版本,然後保留舊的引用元素,然後部署該元素,然後刪除引用的元素並稍後進行部署。

用這種方式,用戶不會在頁面內看到破碎的元素。

相關問題