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. 检查现场

如果你可以保持你的数据库更新不中断,那么回退可以很简单,因为换回时隙。如果不是这样,你又回到了熟悉的回滚脚本或恢复快照的痛苦之中。