2012-04-10 14 views
12

Antecedentes: -¿Cuál es la forma correcta de lidiar con la migración de bases de datos al usar South, Django y Git?

Estoy usando Django 1.3. Estamos usando South como el módulo para la migración de bases de datos y Git SCM.

Problema: -

¿Cuál es la forma correcta de hacer frente a la carpeta de las migraciones que se forma?

El principal problema es que realizo cambios en el esquema DB en la máquina de desarrollo, cuando lo subo al servidor de producción, tengo que migrar el esquema existente. Al hacerlo, siempre hay algún problema con los archivos de migración.

¿Debo simplemente agregar la carpeta de migraciones al gitignore? o hay una mejor manera de hacerlo?

+0

¿Qué problema tienes con los archivos de migración? Por lo general, compruebo estos en git, y funciona bien siempre que tenga cuidado de mantenerlos en secuencia (por lo que no hacer nuevos en paralelo en diferentes ramas). – Dougal

+0

El problema es que si migro el esquema en la máquina local y trato de hacer lo mismo en la máquina de producción, no funcionará una vez. Esto funciona ? es decir, ¿los mismos archivos de migración también funcionan para el servidor de producción? – Akamad007

+0

Sí, deberían hacerlo, suponiendo que no haya realizado otros cambios en el DB. Si tiene un mensaje de error específico o algo así, podemos intentar depurarlo, pero "no funcionó una sola vez" es difícil de trabajar. : p – Dougal

Respuesta

21

Debe agregar la carpeta de migraciones a su sistema de control de versiones y usar los mismos archivos para producción y desarrollo. Puede experimentar algunos problemas en su sistema de producción si no introdujo sus migraciones desde el principio y ya tiene tablas existentes.

Por lo tanto, tiene que falso la primera migración, que normalmente hace lo mismo que syncdb cuando creó su base de datos por primera vez. Por lo tanto, cuando intente aplicar migraciones para su aplicación por primera vez en la máquina de producción, ejecute manage.py migrate app_name 0001 --fake. Esto le permite a South saber que la primera migración ya se aplicó (lo que ya sucedió con syncdb) y que cuando ejecuta migrate nuevamente, continuará con las siguientes migraciones.

+0

Esto es exactamente lo que estaba buscando. : P gracias !! (Encontré tu respuesta y también la investigué. Están de acuerdo tan asombrosos) – Akamad007

Cuestiones relacionadas