Creo que hay dos partes en este problema.
Primero está gestionando el esquema de la base de datos y sus cambios. Hacemos esto usando South, manteniendo los modelos de trabajo y los archivos de migración en nuestro repositorio de SCM. Por seguridad (o paranoia), tomamos un volcado de la base de datos antes (y si estamos realmente asustados, después) de ejecutar cualquier migración. South ha sido adecuado para todos nuestros requisitos hasta ahora.
En segundo lugar está desplegando el cambio de esquema que va más allá de solo ejecutar el archivo de migración generado por South. En mi experiencia, un cambio en la base de datos normalmente requiere un cambio en el código implementado. Si tiene incluso un pequeño conjunto de servidores web, mantener el código implementado sincronizado con la versión actual del esquema de la base de datos puede no ser trivial; esto empeora si considera las diferentes capas de almacenamiento en caché y el efecto para un usuario del sitio ya activo. Los diferentes sitios manejan este problema de manera diferente, y no creo que haya una respuesta única para todos.
Resolver la segunda parte de este problema no es necesariamente sencillo. No creo que haya un enfoque único para todos, y no hay suficiente información sobre su sitio web y su entorno para sugerir una solución que sea la más adecuada para su situación. Sin embargo, creo que hay algunas consideraciones que pueden tenerse en cuenta para ayudar a guiar el despliegue en la mayoría de las situaciones.
Llevar todo el sitio (servidores web y base de datos) fuera de línea es una opción en algunos casos. Sin duda, es la forma más sencilla de administrar actualizaciones. Pero el tiempo de inactividad frecuente (incluso cuando está planificado) puede ser una buena forma de ir rápidamente a nuestro negocio, hace que sea tedioso implementar incluso pequeños cambios de código y puede llevar muchas horas si tiene un gran conjunto de datos y/o una migración compleja. Dicho esto, para los sitios que ayudo a administrar (que son todos internos y generalmente solo se usan durante las horas de trabajo en días hábiles), este enfoque funciona de maravilla.
Tenga cuidado si realiza los cambios en una copia de su base de datos maestra. El principal problema aquí es que su sitio aún está activo y, presumiblemente, acepta escrituras en la base de datos. ¿Qué sucede con los datos escritos en la base de datos maestra mientras está ocupado migrando el clon para un uso posterior? Su sitio tiene que estar inactivo todo el tiempo o poner temporalmente en estado de solo lectura, de lo contrario, los perderá.
Si sus cambios son compatibles con versiones anteriores y tiene una granja de servidores web, a veces puede salirse con la actualización del servidor de base de datos de producción en vivo (que creo que es inevitable en la mayoría de las situaciones) y luego actualizar nodos en la granja tomando fuera del equilibrador de carga durante un breve período. Esto puede funcionar bien; sin embargo, el principal problema aquí es que si un nodo que ya ha sido actualizado envía una solicitud de una URL que no es compatible con un nodo anterior, se producirá un error ya que no se puede gestionar en el nivel del equilibrador de carga.
He visto/escuchado algunas otras maneras de trabajar bien.
El primero es ajustar todos los cambios de código en un bloqueo de características que luego se puede configurar en tiempo de ejecución a través de algunas opciones de configuración en todo el sitio. Esto significa esencialmente que puede liberar código donde se desactivan todos sus cambios, y luego de que haya realizado todas las actualizaciones necesarias en sus servidores, cambia su opción de configuración para habilitar la característica. Pero esto produce un código bastante pesado ...
El segundo es dejar que el código administre la migración. He oído hablar de sitios donde los cambios en el código están escritos de tal manera que maneja la migración en tiempo de ejecución. Es capaz de detectar la versión del esquema que se está utilizando y el formato de los datos que obtuvo. Si los datos provienen del esquema anterior, hace la migración en su lugar, si los datos ya provienen del nuevo esquema, no hace nada. . A partir del uso natural del sitio, una gran parte de sus datos serán migrados por personas que usan el sitio, el resto lo puede hacer con un script de migración cuando lo desee.
Pero creo que en este punto Google se convierte en su amigo, porque como digo, la solución es muy específica del contexto y me preocupa que esta respuesta empiece a perder sentido ... Busque algo como "implementación sin tiempo cero" "y obtendrá resultados como this con muchas ideas ...
La mayoría de los desarrolladores de Django que conozco usan South. Yo uso el Sur yo mismo. ¿Qué crees que "extrañará bastante"? He tenido mis quejas con South, pero en su mayor parte, funciona. – super9
¿Cuál es el volumen aproximado de su aplicación? – David542