Pergunta

Eu quero usar sul no meu projeto Django como ferramenta de migração, mas não tenho problema com o uso do Sul no cenário multiusuário:

Dois devs que trabalham simultaneamente em diferentes máquinas criar duas migrações com mesmo número

  • em primeiro PC: 0007_extend_lizard.py

  • no segundo PC: 0007_swap_name_adopter.py

Neste caso, eu posso correr ./manage migrate --merge ou ./manage migrate 0006 (rollback) e executar novamente ./manage migrate. Mas quando eu quero adicionar novo campo na models.py e ./manage startmigration southdemo --auto prazo, em seguida, recebe sul metadados models = {} da última migração, e tem tem informação ausente da primeira migração. O resultado deste é a criação de migração 0008 com a criação de novo (!!!) muda de primeiro 0007.

Qual é a melhor maneira de resolver este problema?

Atualmente estou pensando em duas opções:

  • manualmente fundir ambos 0007 migração em um arquivo e, em seguida, migrar (mas alguém deve executar "reversão")

  • manualmente movimento faltando models = {} meta para a última 0007 migração e, em seguida, a próxima --auto em 0008 irá funcionar perfeitamente.

O que é a melhor opção? Ou há algo mais que eu estou perdendo?

Foi útil?

Solução

Depois de fazer o migrate --merge ou rollback-e-migrate, se você sabe que a migração mais recente agora tem modelos congelados imprecisos, gostaria apenas de criar uma nova migração não-op para efeitos de trazer os modelos congelados até à data. Basta executar ./manage.py startmigration myapp --empty freeze_noop. Agora seus modelos congelados será up-to-date para a próxima vez que você quiser detectar automaticamente uma migração real.

Talvez parece um pouco feio para criar uma migração não-op, mas para mim isso parece mais limpo do que qualquer uma das opções de edição de história manuais que você sugeriu. Você pode pensar a migração não-op como o equivalente de um "merge commit" em um DVCS.

Esta questão deve ser mencionado no esta secção dos docs do Sul ; Eu arquivado um problema para ele . (Update:. Agora é)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top