migración django y sur con conflictos (0007_two & # 8230; y 0007_one) ¿cómo resolverlo?

StackOverflow https://stackoverflow.com/questions/1447016

  •  22-07-2019
  •  | 
  •  

Pregunta

Quiero usar el sur en mi proyecto django como herramienta de migración, pero tengo problemas con el uso del sur en un escenario multiusuario:

Dos desarrolladores que trabajan simultáneamente en diferentes máquinas crean dos migraciones con el mismo número

  • en la primera PC: 0007_extend_lizard.py

  • en la segunda PC: 0007_swap_name_adopter.py

En este caso, puedo ejecutar ./manage migrate --merge o ./manage migrate 0006 (rollback) y ejecutar nuevamente < code> ./ manage migrate . PERO cuando quiero agregar un nuevo campo en models.py y ejecutar ./manage startmigration southdemo --auto , luego south obtiene models = {} metadatos de la última migración, y le falta información de la primera migración. El resultado de esto es crear la migración 0008 con crear de nuevo (!!!) cambios desde la primera 0007.

¿Cuál es la mejor manera de resolver este problema?

Actualmente estoy pensando en dos opciones:

  • Combina manualmente ambas migraciones 0007 en un archivo y luego migra (pero alguien debe ejecutar " rollback ")

  • Mueva manualmente los models = {} faltantes a la última migración 0007 y luego el siguiente --auto en 0008 funcionará perfectamente.

¿Cuál es la mejor opción? ¿O hay algo más que me estoy perdiendo?

¿Fue útil?

Solución

Después de hacer la migrate --merge o rollback-and-migrate, si sabe que la migración más reciente ahora tiene modelos congelados inexactos, simplemente crearía una nueva migración sin operación para el propósitos de actualizar los modelos congelados. Simplemente ejecute ./manage.py startmigration myapp --empty freeze_noop . Ahora sus modelos congelados estarán actualizados la próxima vez que quiera detectar automáticamente una migración real.

Tal vez parezca un poco feo crear una migración sin operación, pero para mí esto parece más limpio que cualquiera de las opciones de edición de historial manual que sugirió. Puede pensar en la migración sin operación como el equivalente de un "compromiso de fusión" en un DVCS.

Este problema debería mencionarse en esta sección de los documentos del Sur ; He presentado un problema para él . (Actualización: ahora es.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top