Migración de bases de datos y ranuras de implementación de Azure

15

Estoy planeando implementar una nueva aplicación web en un Servicio de aplicaciones web de Azure (antiguo sitio web de Azure). Me gustaría hacer uso de las ranuras de implementación para poder probar mi implementación antes de llevarla a producción. Eso está bien siempre que no se requiera un cambio de esquema de base de datos. Pero si hay un cambio de esquema, no puedo tener dos versiones de software que funcionen en la misma versión de DB. Dado que estoy usando EF Migraciones, el empuje hacia la ranura de almacenamiento instantáneamente daría como resultado una actualización de la base de datos a la última versión.

Entonces, mi pregunta es, ¿hay algún uso de ranuras de implementación cuando se requiere una migración db?

Cómo se hace para los grandes proveedores de SaaS. ¿Están realizando una migración de DB al instante con la nueva versión? Eso seguramente causaría algún tiempo de inactividad.

Solo puedo pensar en soluciones bastante complejas para este problema, ¿hay algo simple?

Sam7
fuente
¿Entonces no tienes una base de datos de desarrollo?
JeffO
Sí, tenemos un sistema de desarrollo y control de calidad. El sistema descrito anteriormente es para fines de producción.
Sam7
@ Sam7 ¿logró encontrar una solución a este problema? Saludos
WestDiscGolf
Me temo que no. Actualmente estamos probando cambios de migración en un entorno separado.
Sam7
@ Sam7: creo que puede administrar esto mediante un archivo .config separado con una cadena de conexión propia a su base de datos. pero tiene razón, cuando despliega desde el escenario hasta la producción, el beneficio de una reversión ya no funciona. los cambios de db se aplicarán al instante. Tengo curiosidad por una solución en el futuro cercano ...
Roger S.

Respuestas:

3

Son posibles las versiones de tiempo de inactividad cero con las ranuras de Azure App Service y una única base de datos compartida por Staging and Production, pero debe asegurarse de que todos los cambios en la base de datos sean compatibles con versiones anteriores, de modo que las versiones actuales y nuevas de la aplicación web puedan ejecutarse simultáneamente en los espacios de puesta en escena y producción.

Algunas reglas que aseguran que esto funcione:

  • Las nuevas columnas de la base de datos deben ser anulables o tener valores predeterminados
  • Cambiar el nombre de las columnas no está permitido
  • No se permite soltar columnas

Cuando necesite hacer cambios destructivos, como renombrar o soltar columnas, necesita 2 versiones para hacer esto:

  1. Se debe lanzar la nueva versión de la aplicación web, que elimina la dependencia de las columnas renombradas / descartadas
  2. Se realiza una versión adicional que realiza los cambios destructivos.

Si bien esto suena un poco complicado, en la práctica es probable que no realice cambios destructivos con mucha frecuencia.

Cocowalla
fuente
0

¿Has mirado los elementos de configuración específicos de la ranura? En Aplicación web / Configuración / Configuración de la aplicación, puede especificar la configuración de la aplicación web pero también definir si solo se aplica a este espacio.

Por lo tanto, podría tener una cadena de conexión específica de la ranura para su ranura provisional y aplicar también la migración en las ranuras de intercambio.

Owain Thomas
fuente
2
Eso va en contra de mi idea de que el sitio de preparación funcione exactamente con el mismo conjunto de datos (-> base de datos) que la producción.
Sam7