2011-01-20 79 views
1

我習慣於用C#.NET編寫桌面應用程序。我在哪裏有一個很好的小解決方案文件夾,它也受版本控制。因此,在任何時候,在任何計算機上,我都可以查看我的軟件的任何版本,以便運行編譯器並獲得我的程序的工作副本。如何學習如何創建/部署/管理網站?

現在,我尋找到發展的網站,那裏的文件和數據很多比較分散。我使用的是ASP.NET,但真正的問題是更一般的,可以應用於任何網站框架。

我試圖理解發展我的網站,一個版本控制服務器,和實際生活的網站,用戶將看到之間的適當工作流。顯然這可能會有很大的不同,取決於網站的類型和規模,但我只考慮一個非常簡單的網站。我剛剛開始使用這些東西。下面

圖顯示了我目前的想法。該站點的所有源文件都將存儲在一個顛覆服務器上,我將檢查到本地計算機上。我的本地計算機會有一個本地數據庫,我將用它來開發該網站。接下來,我將發佈到託管服務器上的測試版本,該版本將指向單獨的測試數據庫。這個測試數據庫可能會定期替換爲實時數據庫的副本。

如果一切順利,我會再發布到它指向實時數據網站的測試版。用戶然後可以檢查測試版本以提供反饋。最後,如果仍然沒有問題,活動網站的源文件將被更新。

alt text

這是否有道理?有沒有人有任何意見,如何可以改善?是否有任何好的書籍或在線教程可用於開發這些類型的工作流程?

另外,我真的不確定的一件事是如何管理對數據庫實際模式的更改。我認爲每個版本都可以生成一個SQL腳本,可用於更新主機上的測試和實時數據庫。不過,我還希望能夠爲我的站點的任何版本輕鬆設置新的數據庫,而無需爲每個版本運行每個更新SQL腳本,直到達到所需的版本。使用像NHibernate或Subsonic這樣的ORM是最好的解決方案,所以我可以直接從我的代碼生成我的數據庫模式?

回答

0

我目前使用的工作流程與此非常相似。這並不完美,但大多數情況下效果不錯。這聽起來像你很重要的部分了。

我在哪裏工作,我們有一個強大的Web服務器。我們的Subversion Repos也存在於這臺服務器上。對於我自己來說,作爲LAMP開發人員,我使用本地MySQL數據庫在本地Linux機器(或VM)上完成了所有的開發工作,並在本地工作副本上運行。

在任何時候,我都會維護應用程序的兩個主要分支:Dev分支(中繼線)和Live分支(反映當前生產版本)。我的回購協議是這樣的:

/repo/trunk/  [My current active development version] 
/repo/archive/  [All other versions not in active development live here] 
/repo/archive/2010.12/ [This happens to be the current production version] 

在Web服務器上,我們維持軟件的三個獨立的實例:實時(或生產),Beta和開發。下面應該說明我們如何使用這些版本的

  • 開發 - 始終指向我們的`/回購/主幹」開發版本。使用非血壓配置文件指向開發數據庫。然而發展在這裏從來沒有在身體上完成相反,我們在本地機器上工作,我們的工作副本指向中繼,並在本地機器上進行所有開發測試。但是,在多個開發人員提交幾次提交之後,在Dev服務器上進行測試以確保我們走在正確的軌道上並且沒有人違反別人的更改是非常重要的。

  • 直播 - 始終指向最新的穩定版本。在這種情況下,它指向/repo/archive/2010.12/。這個版本是世界可訪問的。

  • Beta - 大多數情況下,Beta將成爲Live上的最新動態鏡像,並指向我們存儲庫中的相同生產版本(/repo/archive/2010.12)。任何時候,我們需要在Live上修復錯誤,我們將它們放在這裏,測試它們,然後在現場更新&。 (我們在必要時將它們合併到主幹。)

當幹線的版本被認爲是完成並準備測試,我在版本庫創建一個新的存檔分支爲即將到來的新版本(即2011.01)通過svn copy ing現有的生產分支。然後我將Trunk版本合併到新的分支中並進行提交,因此我們有一個版本反映了當前Dev上的內容。當然現在開發者可以繼續在Dev上繼續積極開發下一個版本,而Beta版測試這個新的存檔版本。在測試完成後,我們會提交任何修復程序並將Live切換到新版本(/repo/archive/2011.01)。

現在,您可能已經發現數據庫合併有點棘手。我們使用MySQL,據我所知,沒有適合MySQL的版本控制系統。因此,每次遷移時(VM到Dev,Dev到Beta,Beta到Live),我將首先備份當前數據庫,然後進行必要的更改。我個人使用的商業版本的SQLYog允許我同步數據庫模式(超級方便)。

+0

謝謝這真的有很大的幫助。你說得對,這聽起來像你正在做我打算做的事情。雖然這對我來說會更簡單,因爲我不必擔心其他開發者,那麼我自己也會回購。但是,對於如何在本地,測試版和產品之間管理對數據庫模式的更改,我仍然不能100%確定。 – 2011-01-21 06:13:02