2009-06-01 99 views
5

Web應用程序的多階段部署的一些最佳實踐和一般理論是什麼?多階段部署建議?

我使用Git,Capistrano的,而客運應用部署的Rails特別感興趣,我發現職位,討論過程的螺母和螺栓:

對於每個階段(測試,分期,生產)我應該考慮什麼?這些階段是否應該部署到不同的物理服務器?有關多階段部署的任何提示或建議?我應該注意的任何障礙?

最好,

雅各

+1

對不起,我不得不刪除這兩個超鏈接到這些博客文章,以發佈問題。任何有興趣瞭解更多信息的人都可以Google將這些項目直接轉到帖子。 – trisignia 2009-06-01 14:24:41

+0

爲什麼你必須刪除超鏈接? – 2009-06-01 14:25:54

回答

0

最好是有兩個不同的服務器環境:分期和生產。我總是忽略測試環境。測試環境就像生產一樣,但完成後回滾數據庫。在同一臺服務器上運行可能會對生產環境的性能和穩定性產生負面影響。升級在分段環境中測試的gem可能會對生產產生負面影響,並會降低停機時間。

您必須非常警惕,相同的gem版本在兩臺服務器上。如果應用程序的版本在分期中工作,但由於這種差異而無法投入生產,則可能會造成麻煩。

我總是會打開一個控制檯窗口,準備好回滾最後一次部署以防出現問題。這個過程實際上並沒有太多的東西。

爲自己節省一些錢,購買最便宜的登臺服務器即可。你是唯一一個會使用它的人,對吧?只要確保他們來自同一供應商。

1

我一直在剛剛創建的每個部署目標帽任務,並利用它們在命令行上:

# deploy.rb 
task :stage do 
    server 10.0.0.1 ... 
end 

> cap stage deploy 

您還可以定義自定義每個目標任務內的任務,比如,做清理的部署分期,但不在生產中。由於這些部署目標任務很少很大,我從來沒有真正看到像多級安裝帽擴展這樣的點,但我想其他人的情況可能會有所不同。

我確實認爲生產應該與其他環境分開,否則存在舞臺上不合理的流程會影響生產性能的危險。

有時我爲了便於分期而定義上限任務,比如爆炸數據庫並從最近的生產轉儲中重新加載它。這些任務應該通過設置變量或類似的東西來檢查他們的部署目標,並拒絕運行生產作爲對付深夜錯字的保險。

在你的deploy.rb中放置很多自定義行爲是很誘人的,但我發現這往往會反彈,並且需要大量的維護工作,因爲你的環境或cap api的改變。

我在大型環境中看到的另一種做法是擁有一個帶有結帳的外殼帳戶,該帳戶可以跟蹤專門設置爲Capistrano控制點的穩定分支。你ssh進入並在那裏運行cap命令而不是本地。這可以幫助避免在您的本地結帳的deploy.rb進行修改時發生的問題,這些修改尚未準備好用於部署到生產環境。這對於git vs svn來說並不是什麼問題,但是仍然需要小心地考慮一下他們在運行cap命令時他們的本地deploy.rb是什麼。

這幾天Heroku真的讓這個東西變得簡單了,而EY和其他人並沒有完全落後。

0

我們一直在非常成功地使用capistrano多級部署一年多。系統以與Rails環境文件幾乎完全相同的方式很好地將每個階段的部署文件分開。這很容易設置和管理。