我目前正在运行带有多个部署位置的webApp(例如开发,登台,制作)。每个Slot都连接到一个数据库(db_dev,db_staging,db_production)。我想部署到临时插槽,然后切换生产。数据库迁移如何适应这里?
我的意思是,如果我将具有db迁移的新构建部署到分段,则db_staging会更新。如果我切换插槽怎么办?迁移是否应用于db_production?停机时间怎么样?
据我所知,只有URL被切换,所以切换后,临时插槽中的app会指向db_production吗?这没有意义。
我可以部署到临时插槽并指向db_production(使用迁移),但随后数据库将被更新,并且可能会破坏实时插槽中的应用程序。
答案 0 :(得分:2)
不要在源代码中对连接字符串进行硬编码,而是将它们放在应用服务设置的连接字符串部分下,并将其作为环境变量进行访问。它不仅更安全,因为它允许您只为任何环境提供一个代码,并通过将设置检查为“插槽设置”,无论您是否交换,对于该插槽,配置保持固定。
更多信息:
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模块将等到此代码完成后再完成交换过程,这基本上允许应用程序的生产流量。基本逻辑将检查数据库是否正在运行预期版本,如果不是,则将按顺序执行某些其他逻辑。
答案 1 :(得分:2)
我一直在思考这个问题,据我所知,唯一明智的过程如下:
如果您可以保持数据库更新不中断,那么回滚可以很简单,就像交换插槽一样。如果没有,您将回到熟悉的回滚脚本或恢复快照的痛苦中。