團隊開發 資料庫如何搭建 網站如何搭建 大家才能共同修改

希望來個最實在的辦法 最通用 最實戰的做法 麻煩


在ruby on rails環境里, 使用migration機制管理表結構, 使用seed來初始化數據。

發布代碼可以參考capistrano這個插件, 把環境分為develop、staging、production。

本機開發用develop,使用git同步團隊migration代碼文件,保持資料庫結構一致。發布前先將代碼發布至staging環境,進行上線前測試,確認沒有問題後再發布至production環境。

分享一下我們團隊的做法。

我用PHP做了一個小工具做資料庫版本升級,這個工具的原理是在創建資料庫時,初始化一張叫db_version的表,這張表只有一個欄位,記錄當前資料庫版本號,之後每次做版本更新,都從這張表取出版本號,跟當前發布的程序版本比對後,決定要跑哪些資料庫變更腳本。

資料庫變更腳本是在工具的某個子目錄下管理的一堆php文件,文件名用的是日期,比如今天是2014年7月2日,程序員提交資料庫變更腳本時用的版本好就是2014-07-02-01.php、2014-07-02-02.php,尾部的01和02是一個順序遞增的序號。

為什麼不直接寫SQL文件而是提交php文件來做資料庫變更呢?主要原因是我們做的項目是遊戲,玩家的數據有時候會因為策劃的需求調整導致需要做數據轉換或者做玩家補償,用純SQL很難做到靈活的修複數據和玩家補償。

資料庫中db_version表記錄的是最後執行到的變更文件的文件名縮寫,比如最後執行是2014-07-02-02.php這個文件,db_version裡面的值就是2014070202,當有人提交了2014-07-02-03.php後,工具比對db_version後,只會執行03這個腳本,不會重複運行之前運行過的腳本了。

這樣就可以做到開發時所有人的機器上以及內網的公共測試環境能順利升級,外網的生產環境就能順利升級。

同時這個工具還提供資料庫導出功能,導出後的文件跟手工提交的文件是放在一起的,名字也是一樣規格的,比如2014-07-02-04.php,但是文件頭部有一行特殊的注釋,用來讓工具知道這個文件是導出內容。

當部署一個全新的伺服器的時候,不需要將所有的變更腳本從頭運行到尾執行一遍,只需要先執行最後一份導出腳本,接著執行這個腳本之後的升級文件即可。

需要注意的是,導出的功能必須嚴格限制,不能隨意在不同機器導出,否則庫結構和模板數據可能被污染,我們開發流程上是限制只有內網的公共測試伺服器才能導出資料庫結構和模板數據,策劃人員添加或修改模板數據會通用一個工具往這個伺服器的資料庫里添加和修改。

當版本發布的時候,確認所有人程序都提交了,策劃數據都錄入完畢,接著由負責發布的人導出表結構和模板數據並提交,然後到發布用的目錄獲取所有變更,打包發布。

這套方案運行很久了,雖然不是非常完美,但是大部分時候是好用的。


版本控制器
版本控制器,資料庫的更新自己做個DB migration的東西,可以up 也可以down就好,可能還有數據的更改,回滾。
我覺得,題主需要說明你們當前的情況。人數,能力,伺服器環境,要做的東西的大概形式。不然,沒有辦法提供適合你們的方案。


首先是必須要用版本控制。

然後把生產的伺服器和測試的伺服器分開,每次部署的時候先部署到測試伺服器,這樣即使測試失敗,也不會影響到生產環境。
一台公共的 DB 伺服器一台公共的 DEV 伺服器(DB 和 DEV 可以共享一台)利用版本控制,如 SVN。開發方式:所有人本機開發業務代碼,資料庫連接公共的 DB。隨後將完成的代碼提交 SVN。DEV 伺服器上執行一個 crontab,定時更新 SVN 版本到伺服器項目目錄中。個人調試就在本地開發機上,聯調就在 DEV 伺服器上。如果有條件,可以加設 SIT 伺服器和 UAT 伺服器,用來做集成測試和驗收測試。同理可以用 SVN 的分支來分別管理每台伺服器上的代碼版本。
推薦閱讀:
相关文章