由 斯科特·米切爾
部署 ASP.NET 網頁應用程式需要將必要的檔案和資源從開發環境帶到生產環境。 對於資料驅動的網頁應用,這包括資料庫結構與資料。 本教學是系列中的第一篇,探討成功從開發環境部署資料庫到生產環境所需的步驟。
簡介
部署 ASP.NET 網頁應用程式需要將必要的檔案和資源從開發環境帶到生產環境。 在過去六個教學中,我們探討了如何部署一個簡單的書評網頁應用程式。 這個示範網站包含多個伺服器端資源——ASP.NET 頁、設定檔、檔案 Web.sitemap 等等——以及客戶端資源,如圖片和 CSS 檔案。 那麼,數據驅動的網頁應用呢? 部署使用資料庫的網頁應用程式時,還需要採取哪些額外步驟?
接下來的幾個教學中,我們將介紹部署資料驅動網頁應用程式所需的步驟。 本教學首先探討如何將資料庫的結構與內容從開發環境傳送到生產環境,接著教學則著手檢視所需的設定變更。 接著,我們將探討部署使用應用程式服務(會員、角色、個人資料等)資料庫時所面臨的挑戰。
檢查更新版書評網路應用程式
為了示範如何部署資料驅動的網頁應用程式,我將書評網頁應用程式從簡單靜態網站更新為資料驅動網站。 如同之前,本教學下載中有兩個版本的應用程式:一個使用網頁應用程式專案模型,另一個使用網站專案模型。
更新後的書評網頁應用程式使用 SQL Server 2008 Express Edition 資料庫,該資料庫儲存在網站 s App_Data 資料夾(~/App_Data/Reviews.mdf)。 如果你的電腦上安裝了 SQL Server 2008,示範應該會順利執行。 如果你有舊版 SQL Server,可以安裝免費的 SQL Server 2008 Express Edition,或是使用本教學下載的資料庫腳本自行建立資料庫。
資料庫 Reviews.mdf 包含四個資料表:
-
Genres- 包含每個類型的記錄,如科技、小說和商業。 -
Books- 包含每篇評論的紀錄,欄位如Title、GenreId、ReviewDate、Review等。 -
Authors- 包含每位對已經審閱書籍有貢獻的作者資訊。 -
BooksAuthors- 多對多連接表,指定哪些作者寫了哪些書籍。
圖 1 展示了這四個表格的 ER 圖。
圖 1:書籍評論網頁應用程式資料庫由四個表格組成(點擊查看全尺寸圖片)
先前版本的書評網站為每本書設有獨立的 ASP.NET 頁。 例如,有一個名為
圖2和圖3展示了 Genre.aspx 與 Review.aspx 頁面的運作情況。 請注意每頁網址列中的網址。 在圖2中是 Genre.aspx?ID=85d164ba-1123-4c47-82a0-c8ec75de7e0e。 由於 85d164ba-1123-4c47-82a0-c8ec75de7e0e 是 GenreId 科技類型的數值,頁面標題為「科技評論」,而項目符號列表則列出該類型網站上屬於該類型的評論。
圖 2:科技類型頁面(點擊查看全尺寸圖片)
圖3: 24小時內《自學 ASP.NET 3.5 》評測(點擊查看全尺寸圖片)
書評網頁應用程式也包含管理區塊,管理員可新增、編輯及刪除類型、書評及作者資訊。 目前,任何訪客都可以進入行政區。 未來的教學中,我們將新增對使用者帳號的支援,並只允許授權使用者進入管理頁面。
如果您下載書評應用程式,請記得其目的是展示如何部署資料驅動應用程式。 它在應用程式設計方面並未展現最佳實務。 例如,沒有獨立的資料存取層(DAL);ASP.NET 頁面透過 SqlDataSource 控制項或 ADO.NET 其程式碼背後類別直接與資料庫通訊。 若想更深入了解如何利用分層架構打造資料驅動應用程式,請參考我的 《與資料共處 》教學。
開發與生產資料庫
當你開始開發資料驅動的網頁應用程式時,必須指定一個資料庫連接字串,提供應用程式如何連接資料庫的詳細資訊。 這個連接字串指定了資料庫伺服器、資料庫名稱及安全資訊等多項資訊。 大多數情況下,應用程式在開發期間使用的資料庫與生產環境中使用的資料庫不同。 使用不同資料庫進行開發環境與生產環境的操作,相較之下有許多好處。 開發中有不同的資料庫,代表你不用擔心不小心修改或刪除即時資料。 它也能讓你放入虛擬測試資料或對資料模型做破壞性變更,而不用擔心對生產環境的應用程式影響。 在開發與生產環境中使用不同資料庫的缺點是,當應用程式部署時,資料庫以及任何相關的資料庫結構或資料變更都必須一併部署。
在首次部署之前,資料庫只有一個實例,且該實例位於開發環境中。 首次將應用程式部署到生產環境時,我們不僅必須複製所需的伺服器端與客戶端檔案,還必須將資料庫從開發環境複製到生產環境。 目前我們對 Book Reviews 網頁應用程式的處境是這樣的——資料庫位於開發環境中的 App_Data 資料夾中,但尚未推送到生產環境。
應用程式部署後,資料庫會有兩份副本。 隨著應用程式成熟,可能會新增功能,這也需要資料模型的變更(例如新增欄位到現有資料表、修改現有欄位、新增資料表等等)。 當網頁應用程式下一次部署時,自上次部署以來套用到開發環境中資料庫的變更必須套用到生產環境的資料庫。 管理此過程的一些策略將在未來的教學中討論。 本教學重點在於從開發環境部署整個資料庫到生產環境。
將資料庫部署至生產環境
本教學的後半部分將探討如何將資料庫從開發環境部署到生產環境。 如果您正在按照步驟進行,請務必確認您在網站託管服務供應商的帳號已包含 Microsoft SQL Server 資料庫支援。 你還需要手邊有一些資訊,例如資料庫伺服器名稱、資料庫名稱,以及用來連接資料庫的使用者名稱和密碼。
如本教學先前所述,書評網站的資料庫是儲存在 App_Data 資料夾中的 SQL Server 2008 Express Edition 資料庫。 合理推斷,部署此類資料庫只需將開發環境的資料夾複製 App_Data 到生產環境即可。 然而,大多數網頁主機供應商因安全考量不支援資料夾中的 App_Data 主機資料庫。 相反地,網頁主機會在其環境中的 SQL Server 資料庫伺服器上提供一個帳號。 要將資料庫從開發環境部署到生產環境,需要先在你的網頁主機資料庫伺服器上註冊資料庫。
那麼,如何將資料庫從開發環境帶到生產環境呢? 根據你的主機提供哪些服務,有幾種方法可以做到這一點。 有些主機,例如 DiscountASP.NET,你可以用 FTP 備份資料庫或實際 .mdf 檔案到網站,然後從控制面板還原備份檔案或附加 .mdf 到 SQL Server 資料庫伺服器。 使用這些工具,部署資料庫只需將資料夾複製 App_Data 到生產環境,然後透過控制面板附加即可。 這或許是首次發布資料庫最簡單且最快的方式。
另一種方法是使用資料庫發佈精靈。 資料庫發佈精靈是一個 Windows 桌面應用程式,會產生建立資料庫結構的 SQL 指令——資料表、儲存程序、視圖、使用者自訂函式等等——以及可選的資料表中的資料。 接著你可以透過 SQL Server Management Studio 連接到你的網頁主機提供商的資料庫伺服器,然後執行這個腳本,在生產環境中複製資料庫。 更好的是,如果你的網頁主機提供商支援 Microsoft 的資料庫發佈服務,你可以讓資料庫發佈精靈自動在資料庫伺服器上執行該腳本。 由於資料庫發佈精靈會產生一個腳本來建立資料庫的架構和資料,所以無論你的網頁主機供應商是否提供像是附加上傳 .mdf 檔案等功能,它都會運作。
使用 Database Publishing 精靈產生 SQL 指令以建立資料庫結構與資料
讓我們一起了解如何使用資料庫出版精靈將書評資料庫部署到生產環境。 如果你使用的是 Visual Studio 2008 或更高版本,資料庫發佈精靈已經安裝好了。
打開 Visual Studio,然後進入 Reviews.mdf 資料庫。 如果你正在使用 Visual Web Developer,請前往資料庫總管;如果你用的是 Visual Studio,建議用伺服器檔案總管。 圖 4 顯示了在 Visual Web Developer 的資料庫總管中顯示的Reviews.mdf資料庫。 如圖 4 所示, Reviews.mdf 資料庫由四個資料表、三個儲存程序及一個使用者定義函式組成。
圖 4:在資料庫檔案總管或伺服器檔案總管中定位資料庫(點擊以查看完整影像)
右鍵點擊資料庫名稱,並從右鍵選單中選擇「發佈給提供者」選項。 這會啟動資料庫發佈嚮導(Database Publishing Wizard,見圖 5)。 點擊「下一步」可跳過啟動畫面。
圖 5:資料庫發佈精靈啟動畫面(點擊查看全尺寸圖片)
精靈的第二個畫面列出可透過資料庫發佈精靈存取的資料庫,並讓你選擇是否要為所選資料庫中的所有物件編寫腳本,或選擇要腳本化哪些物件。 選擇適當的資料庫,並勾選「腳本處理所選資料庫中的所有物件」選項。
備註
如果你在圖 6 中點擊「下一步」時出現錯誤「在資料庫databaseName中沒有可由此精靈腳本化的物件類型」,請確保你的資料庫檔案路徑不會過長。 若資料庫檔案路徑過長,可能會產生此錯誤。
圖 6:資料庫發佈精靈啟動畫面(點擊查看全尺寸圖片)
從下一個畫面你可以產生腳本檔案,或者如果你的主機支援,直接將資料庫發佈到你的主機供應商的資料庫伺服器。 如圖 7 所示,我正在將腳本寫入檔案 C:\REVIEWS.MDF.sql。
圖 7:將資料庫編寫成檔案或直接發佈給你的網路主機供應商(點擊查看完整影像)
下一個畫面會提示你選擇多種腳本選項。 你可以指定腳本是否應該包含 drop 陳述式來移除這些現有物件。 這預設為 True,第一次部署資料庫時沒問題。 您也可以指定目標資料庫是 SQL Server 2000、SQL Server 2005 或 SQL Server 2008。 最後,你可以指定是要撰寫 schema 和資料的腳本、只撰寫資料的腳本,或只撰寫 schema 的腳本。 結構是資料庫物件、資料表、儲存程序、檢視等的集合。 資料就是存放在表格中的資訊。
如圖 8 所示,我已設定精靈來丟棄現有資料庫物件、產生 SQL Server 2008 資料庫的腳本,並發布結構與資料。
圖 8:指定發佈選項(點擊查看全尺寸圖片)
最後兩個畫面總結即將執行的動作,然後顯示腳本狀態。 執行精靈的最終結果是,我們有一個腳本檔,裡面包含了在生產環境中建立資料庫所需的 SQL 指令,並用與開發時相同的資料填充。
在生產環境資料庫上執行 SQL 指令
現在我們已經有了包含 SQL 指令的腳本來建立資料庫及其資料,剩下的就是在生產資料庫上執行這個腳本。 有些網頁主機供應商會在控制面板提供文字框,讓你輸入 SQL 指令在資料庫中執行。 如果你的腳本檔案非常大,這個選項可能無法使用( REVIEWS.MDF.sql 例如腳本檔案超過 425 KB)。
更好的方法是直接使用 SQL Server Management Studio(SSMS)連接到生產資料庫伺服器。 如果你的電腦安裝了非 Express 版的 SQL Server,那你很可能已經安裝了 SSMS。 否則,你也可以 下載並安裝 SQL Server Management Studio Express Edition 的免費版本。
啟動 SSMS,並利用你網站主機提供者提供的資訊連接到你的主機資料庫伺服器。
圖 9:連接您的網路主機供應商的資料庫伺服器(點擊查看完整影像)
展開資料庫標籤並找到你的資料庫。 點選工具列左上角的新查詢按鈕,貼上資料庫發佈精靈建立的腳本檔中的 SQL 指令,然後點擊執行按鈕,在生產資料庫伺服器上執行這些指令。 如果你的腳本檔案特別大,執行指令可能需要好幾分鐘。
圖 10:連接您的網路主機提供商的資料庫伺服器(點擊查看完整圖片)
就這麼簡單! 此時開發資料庫已複製至生產環境。 如果你在 SSMS 裡重新整理資料庫,應該會看到新的資料庫物件。 圖 11 顯示生產資料庫的表格、儲存程序與使用者自訂函式,這些函式與開發資料庫中的函式鏡像。 而且因為我們指示資料庫發佈精靈來發佈資料,生產資料庫的表格在執行精靈時的資料表和開發資料庫的資料表是一樣的。 圖12顯示了生產資料庫中表格中 Books 的資料。
圖 11:資料庫物件已複製至生產資料庫(點擊查看完整影像)
圖 12:生產資料庫包含與開發資料庫相同的資料(點擊查看完整影像)
目前我們只將開發資料庫部署到生產環境。 我們尚未考慮部署網頁應用程式本身,也未檢視需要哪些設定變更才能讓生產環境中的應用程式使用生產資料庫。 我們會在下一個教學中詳細介紹這些問題!
總結
部署資料驅動的網頁應用程式需要將開發期間使用的資料庫複製到生產環境。 許多網頁主機供應商提供工具以簡化資料庫部署流程。 舉例來說,使用 DiscountASP.NET 你可以先用 FTP 完成資料庫 .mdf 檔案(或備份),然後從控制面板將資料庫附加到資料庫伺服器。 另一個無論你的網頁主機提供商提供什麼功能都有效的選項是 Microsoft 的資料庫發佈嚮導工具,它會產生一套 SQL 指令腳本,用來建立開發資料庫的結構與資料。 當這個腳本產生後,你可以在生產資料庫中執行它。
現在 Book Reviews 網頁應用程式的資料庫已經上線,我們可以部署應用程式了。 然而,網頁應用程式的設定資訊會指定與資料庫的連接字串,而該連接字串則參考開發資料庫。 部署到生產環境時,我們需要更新這些連線字串資訊。 接下來的教學將探討這些配置差異,並帶你一步步說明如何將數據驅動的書評網站發佈到生產環境。
快樂的程序設計!
進一步閱讀
欲了解更多本教學主題,請參閱以下資源: