2008-10-16 24 views
5

我有一個PHP網站支持MySQL數據庫和一小組程序員提交代碼到顛覆。通常,我們編寫代碼,在本地進行測試,承諾進行顛覆,然​​後將更改後的文件複製到隱藏區域進行在線測試。如何從顛覆中最好地更新網站

但是可以犯錯誤。有時我想刷新該網站,以便毫無疑問地知道網站代碼和數據庫確實代表了顛覆中的內容。我希望儘可能地接近一鍵式解決方案,以便萬無一失。

這樣做的最佳方法是什麼?

順便說一句,如果它很重要,我們在Windows機器上開發。

回答

7

出口能後,每一個post-commit鉤子提交自動完成。

1

檢查代碼以將其放置在要運行的位置的內容是什麼?

+0

您可能會更好地將代碼「導出」到您想要運行它的位置,因此您沒有將所有這些.svn文件夾放在Web服務器上。 – Kibbee 2008-10-16 13:29:20

4

我不建議將您的代碼簽出到生產服務器。這可能會暴露服務器上的svn控制文件(.svn)。

我建議使用腳本(python,ruby等)結合命令行svn和FTP客戶端將文件從svn和ftp文件導出到服務器。 svn export命令可用於從svn服務器檢出一組文件,但不包含所有.svn目錄。另外,不要忘了在做這件事情時給svn倉庫添加標籤,這樣你就有了一個已經部署的檢查點。

+0

您可以使用'svn export'來檢出沒有.svn文件夾的乾淨目錄。 – 2008-10-16 13:37:31

1

代碼版本管理和數據庫版本管理是兩個非常不同的問題。我更喜歡的解決方案分三個階段完成(測試,部署測試,實時)而不是兩個。

  • 更新的代碼,並通過腳本應用數據庫更改在開發環境中
  • 下載實時數據庫的部署測試環境,恢復並應用更改腳本
  • 測試針對「同步」的代碼實時的數據庫
  • 更新通過對信息庫從相關分支SVN現場環境(我們通過ssh隧道做到這一點,因爲它是一個Linux環境)和應用更改腳本現場分貝

編輯:實時環境的更新最好使用導出而不是結帳/更新完成。這不會讓svn的控制文件停滯不前。這可能會也可能不會產生安全隱患,但它確實會強制您指定每次檢查哪個分支。

您的'一鍵'可能可以爲最後一步編寫腳本。

0

我會建議:

  • 每一個複製舊的構建它自己的目錄(快速恢復,你可能只需要保留其中之一)在您的服務器的一個非web訪問的一部分。
  • 然後使用svn export從svn獲取整個新版本。不要使用svn checkout,因爲這將在所有地方留下.svn目錄。
1

如果安裝Subversion命令行客戶端,它很容易使一個批處理文件/ shell腳本,將執行從庫中的最新版本的 結賬 出口到服務器上的文件夾。這需要您在Subversion中具有與您在服務器上相同的文件結構(除非您想添加邏輯來更改腳本中的結構)。

http://svnbook.red-bean.com/en/1.5/svn.ref.reposhooks.post-commit.html

您可以設置鉤自動導出項目的隱藏區域內的在線測試:

1

我建議你寫一些腳本來爲你做這件事。無論您使用PHP還是其他方式執行此操作都取決於您。當你這樣做的時候記住安全性。

做你的項目導出不會導出任何svn:你可能已經設置的外部,這意味着你需要做多個導出。當你編寫它時,它當然不應該成爲一個問題。出口的另一件事情,如果你的項目很大(如果你使用大量的視頻,PDF等),那麼導出會非常麻煩,特別是當你的版本控制在異地託管並且只能通過HTTP使用時。

我建議你做結帳,並確保你的服務器不能提供位於隱藏的.svn文件夾中的任何文件。

0

感謝所有的答案,幫助了很多證明我不是做太多錯誤。 我們正在開發和測試在線Subversion版本庫的本地簽出。 當我們想要部署一個新版本時,我們運行一個腳本,它基本上刪除了現場測試服務器上的當前導出,創建一個新的導出,然後通過rsync部署到所有的Web服務器。

問題是:由於全新的導出,Rsync總是在部署到liveserver時複製所有文件。我其實從來沒有花時間瞭解如何更新導出。

在另一臺機器我只是有一個檢驗和使用rsync部署--without的.svn