带有数据库迁移的Azure Web应用部署插槽
我目前正在运行一个带有多个部署槽(例如开发、登台、生产)的webApp。每个插槽都连接到一个数据库(db_dev、db_staging、db_production)。我想部署到暂存槽,然后切换到生产。数据库迁移如何适应这里 我的意思是,如果我部署了一个新的构建,将db迁移到暂存,那么db_暂存将得到更新。如果我切换插槽会发生什么?迁移是否应用于db_生产?休息时间呢 据我所知,只有URL是切换的,所以切换后,暂存槽中的应用程序将指向db_产品?这没有道理带有数据库迁移的Azure Web应用部署插槽,azure,configuration,entity-framework-migrations,azure-deployment-slots,Azure,Configuration,Entity Framework Migrations,Azure Deployment Slots,我目前正在运行一个带有多个部署槽(例如开发、登台、生产)的webApp。每个插槽都连接到一个数据库(db_dev、db_staging、db_production)。我想部署到暂存槽,然后切换到生产。数据库迁移如何适应这里 我的意思是,如果我部署了一个新的构建,将db迁移到暂存,那么db_暂存将得到更新。如果我切换插槽会发生什么?迁移是否应用于db_生产?休息时间呢 据我所知,只有URL是切换的,所以切换后,暂存槽中的应用程序将指向db_产品?这没有道理 我可以部署到暂存槽并指向db_生产(使用
我可以部署到暂存槽并指向db_生产(使用迁移),但随后db将被更新,并可能在实时槽中中断应用程序。而不是在源代码中硬编码连接字符串,将它们放在应用程序服务设置的“连接字符串”部分下,并将其作为环境变量访问。它不仅更安全,因为它允许您在任何环境中只使用一个代码,而且通过将设置检查为“插槽设置”,无论您是否交换该插槽,该插槽的配置都保持不变 更多信息请点击此处: 更新: 在数据库更新的情况下,即需要运行必要的脚本以更新新应用程序版本的数据库架构,您可以使用web.config的applicationInitialization部分。通常用于预热应用程序,但也适用于您的情况
<system.webServer>
<applicationInitialization >
<add initializationPage="/init-script.php" hostName="xxxxxx.azurewebsites.net"/>
</applicationInitialization>
<system.webServer>
AppInit模块将在完成交换过程之前等待此代码完成,交换过程基本上允许应用程序的生产流量。基本逻辑是检查数据库是否运行预期版本,如果不是,则按顺序执行其他一些逻辑 我也一直在思考这个问题,据我所知,唯一合理的过程如下:
如果您可以保持数据库更新不中断,那么回滚可以很简单,只需将插槽调回即可。如果没有,您又回到了熟悉的回滚脚本或恢复快照的痛苦中 我知道每个插槽都有自己的配置,但是db迁移呢?它们如何应用?假设我通过迁移部署到staging,因此staging db得到更新。如何更新生产数据库?如何访问代码中的变量?目前我使用web.config。提前感谢没有自动方式,因为这是您必须为应用程序实现的自定义逻辑。我发布了一个可能解决问题的更新,尽管我从未为此使用过它。