数据库迁移和Azure部署插槽


16

我打算将新的Web应用程序推送到Azure Web App Service(以前的Azure网站)。我想利用部署插槽来测试我的部署,然后再将其投入生产。只要不需要更改数据库架构就可以了。但是,如果发生模式更改,则不能在同一数据库版本上运行两个软件版本。由于我使用的是EF迁移,因此将其推入暂存插槽将立即导致数据库更新到最新版本。

所以我的问题是,当需要进行数据库迁移时,是否会使用部署槽?

对于大型SaaS提供商,该如何做。他们是否正在使用新版本立即执行数据库迁移?这肯定会导致一些停机时间。

我只能想到解决这个问题的相当复杂的方法,有没有简单的方法?


所以你没有开发数据库?
JeffO

是的,我们有一个开发和质量检查系统。上述系统用于生产目的。
山姆7年

@ Sam7您是否设法找到此问题的解决方案?干杯
WestDiscGolf 2015年

恐怕不是。我们目前正在单独的环境中测试迁移更改。
山姆7年7

@ Sam7:我认为您可以通过一个单独的.config文件管理此文件,该文件具有自己的到数据库的连接字符串。但是您是对的,当您从阶段部署到生产时,回滚的好处不再起作用。数据库更改将立即生效。我对不久的将来的解决方案感到好奇...
罗杰S.15年

Answers:


3

可以使用Azure App Service插槽实现零停机时间释放,也可以使用由Staging和Production共享的单个数据库-但您需要确保所有数据库更改都向后兼容,以便Web应用程序的当前版本和新版本可以在以下版本中同时运行登台和生产广告位。

确保此工作的一些规则:

  • 任何新的数据库列应为可为空或具有默认值
  • 不允许重命名列
  • 不允许删除列

当您确实需要进行破坏性更改(例如重命名或删除列)时,需要2个发行版才能执行此操作:

  1. 应该发布Web应用程序的新版本,从而消除对重命名/删除列的依赖
  2. 进行了具有破坏性更改的附加发行版

尽管这听起来有些复杂,但实际上,您可能不会经常进行破坏性的更改。


0

您是否查看了插槽特定的配置项目?在“ WebApp /设置/应用程序设置”下,您可以指定Web应用程序的设置,还可以定义它是否仅适用于此插槽。

因此,您可以为暂存插槽使用特定于插槽的连接字符串,并将迁移也应用于交换插槽。


2
这与我的安排使登台站点处理与生产完全相同的数据集(->数据库)相违背。
Sam7'7
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.