Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有数据库迁移的Azure Web应用部署插槽_Azure_Configuration_Entity Framework Migrations_Azure Deployment Slots - Fatal编程技术网

带有数据库迁移的Azure Web应用部署插槽

带有数据库迁移的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_生产(使用

我目前正在运行一个带有多个部署槽(例如开发、登台、生产)的webApp。每个插槽都连接到一个数据库(db_dev、db_staging、db_production)。我想部署到暂存槽,然后切换到生产。数据库迁移如何适应这里

我的意思是,如果我部署了一个新的构建,将db迁移到暂存,那么db_暂存将得到更新。如果我切换插槽会发生什么?迁移是否应用于db_生产?休息时间呢

据我所知,只有URL是切换的,所以切换后,暂存槽中的应用程序将指向db_产品?这没有道理


我可以部署到暂存槽并指向db_生产(使用迁移),但随后db将被更新,并可能在实时槽中中断应用程序。

而不是在源代码中硬编码连接字符串,将它们放在应用程序服务设置的“连接字符串”部分下,并将其作为环境变量访问。它不仅更安全,因为它允许您在任何环境中只使用一个代码,而且通过将设置检查为“插槽设置”,无论您是否交换该插槽,该插槽的配置都保持不变

更多信息请点击此处:

更新

在数据库更新的情况下,即需要运行必要的脚本以更新新应用程序版本的数据库架构,您可以使用web.config的applicationInitialization部分。通常用于预热应用程序,但也适用于您的情况

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


AppInit模块将在完成交换过程之前等待此代码完成,交换过程基本上允许应用程序的生产流量。基本逻辑是检查数据库是否运行预期版本,如果不是,则按顺序执行其他一些逻辑

我也一直在思考这个问题,据我所知,唯一合理的过程如下:

  • 停止预缝合
  • 将live DB克隆回新的暂存DB
  • 运行脚本以确保数据安全(清除可能与真实用户联系的信息等)
  • 将临时插槽粘性连接字符串更改为指向此数据库
  • 再次运行DBUP和staging DB(现在是liveish的升级版本)
  • 部署到临时插槽
  • 重新启动预备站点
  • 测试分期,直到满意为止
  • 备份实时数据库
  • 针对live运行DBUP(如果是非破坏性更改,则站点可以 (熬夜)
  • 交换活动和预备活动插槽
  • 现场检查

  • 如果您可以保持数据库更新不中断,那么回滚可以很简单,只需将插槽调回即可。如果没有,您又回到了熟悉的回滚脚本或恢复快照的痛苦中

    我知道每个插槽都有自己的配置,但是db迁移呢?它们如何应用?假设我通过迁移部署到staging,因此staging db得到更新。如何更新生产数据库?如何访问代码中的变量?目前我使用web.config。提前感谢没有自动方式,因为这是您必须为应用程序实现的自定义逻辑。我发布了一个可能解决问题的更新,尽管我从未为此使用过它。