2016-07-28 130 views
1

我目前正在運行帶有多個部署插槽(例如,dev,staging,production)的webApp。每個插槽都連接到數據庫(db_dev,db_staging,db_production)。我想部署到臨時插槽,然後切換生產。數據庫遷移如何適應這裏?帶數據庫遷移的Azure Web App部署插槽

我的意思是,如果我部署一個新的生成與數據庫遷移分期db_staging得到更新。如果我切換插槽會發生什麼?遷移是否適用於db_production?停工怎麼樣?

根據我的理解,只有URL被切換,所以切換後,應用程序在臨時插槽中將指向db_production?那沒有意義。

我可以將其部署到臨時插槽並指向db_production(包含遷移),但隨後該數據庫將被更新並可能會破壞活動插槽中的應用程序。

回答

1

不要在源代碼中對連接字符串進行硬編碼,而是將它們置於應用程序服務設置的連接字符串部分下,並將其作爲環境變量進行訪問。它不僅更安全,因爲它只允許您爲任何環境提供一個代碼,並且通過將該設置作爲「插槽設置」檢查,無論是否交換,對於該插槽,配置都是固定的。

enter image description here

此處瞭解詳情:

https://azure.microsoft.com/en-us/documentation/articles/web-sites-configure/

更新

在數據庫中更新的情況下,即,需要以運行到必要的腳本更新新應用程序版本的數據庫模式,可以使用web.config的applicationInitialization部分。通常用於預熱應用程序,但也應該適合您的情況。

<system.webServer> 
    <applicationInitialization > 
    <add initializationPage="/init-script.php" hostName="xxxxxx.azurewebsites.net"/> 
    </applicationInitialization> 
<system.webServer> 

的AppInit模塊將等到這個代碼完成交換過程,基本上是允許生產業務的應用之前完成。基本邏輯將檢查數據庫是否正在運行預期版本,並且如果沒有其他邏輯將按順序執行。

+0

我知道每個插槽都有自己的配置,但db遷移呢?他們如何申請?假設我使用遷移部署到分段,所以分段數據庫得到更新。生產數據庫如何更新?我如何訪問我的代碼中的變量?目前我使用web.config。在此先感謝 – user3838018

+0

有沒有自動的方式,因爲它是您必須爲您的應用程序實現的自定義邏輯。我發佈了一個可能的解決方法的更新,雖然我從來沒有用於這個目的它應該工作。 –

1

我一直在思考這樣過了,只要我能看到的唯一明智的過程如下:

  1. 停止活動前斯蒂茨
  2. 克隆住DB回到一個新的臨時DB
  3. 運行腳本來使數據
  4. 更改分期槽粘連接字符串在這個數據庫
  5. 運行DBUP aganst分期DB(以指向現在的升級版安全(可能接觸的真實用戶等明確的信息)活十歲上下的錫永)
  6. 部署到分段插槽
  7. 重新開始活動前點
  8. 測試分期,直到滿意爲止
  9. 備份活DB
  10. 運行DBUP倚住(如果他們不換行的變化,網站可以 熬夜)
  11. 交換生活和活動前槽
  12. 檢查現場

如果你可以保持你的數據庫更新不中斷,那麼回退可以很簡單,因爲換回時隙。如果不是這樣,你又回到了熟悉的回滾腳本或恢復快照的痛苦之中。