Open marciomazza opened 6 years ago
Também podemos simplesmente isolar o que está nos RunPython
, filtrar o que deve permanecer e recolocar após um reset. De fato, vários ajustes feitos com RunPython
deixam de ser necessários após um reset de migrations (ou de um squash).
Eis uma listagem dos 23 usos:
> ag -u --python --nobreak RunPython
sapl/compilacao/migrations/0006_auto_20180321_1054.py
34: migrations.RunPython(adjust_contagem_continua),
sapl/compilacao/migrations/0005_auto_20180319_1041.py
43: migrations.RunPython(adjust_dispositivo_raiz),
sapl/materia/migrations/0013_adiciona_status_tramitacao.py
43: migrations.RunPython(gera_status_tramitacao),
sapl/norma/migrations/0001_squashed_0011_auto_20180220_1859.py
15:# RunPython operations to refer to the local versions:
261: migrations.RunPython(code=gera_tipo_vinculo),
sapl/norma/migrations/0008_normajuridica_popula_tipo_vinculo_norma.py
38: migrations.RunPython(gera_tipo_vinculo),
sapl/parlamentares/migrations/0007_adiciona_partidos.py
39: migrations.RunPython(gera_partidos_tse),
sapl/parlamentares/migrations/0010_corrige_data_inicio_mandato.py
35: migrations.RunPython(altera_data_inicio_mandato),
sapl/parlamentares/migrations/0020_fix_inicio_mandato.py
28: migrations.RunPython(popula_campo_data_inicio),
sapl/parlamentares/migrations/0014_auto_20180131_1014.py
45: migrations.RunPython(migrate_municipio_e_uf_como_charfields),
sapl/parlamentares/migrations/0008_adiciona_cargos_mesa.py
40: migrations.RunPython(gera_cargos_mesa),
sapl/parlamentares/migrations/0021_clear_thumbnails_cache.py
22: migrations.RunPython(clear_thumbnails_cache_migrate),
> ag -u --python --nobreak --nogroup RunPython | wc -l
23
Uma curiosidade importante... quando se usam squashes o django acompanha em que ponto cada base está: ele sabe se é uma base nova e está no squash ou se está no meio do caminho nas migrations anteriores.
Ele permite assim um período de "transição" em que as bases podem estar em pontos diferentes. Mas no final, depois que todas chegaram no ponto do squash, é preciso eliminar as migrações velhas e deixar só os squashes. Essa transição pro estado novo de squash é uma forma de reset, mais complexa, mas que controla quem virou a chave.
Fazendo o reset temos alguns passos manuais que acabam zerando a base de dados sobre migrations. Precisamos colocar isso em algum script... que seria rodado na implantação da versão com reset....
Os passos manuais a que me refiro estão em https://github.com/interlegis/sapl/issues/976#issuecomment-289572613
As migrations sapl/parlamentares/migrations/0008_adiciona_cargos_mesa.py, sapl/materia/migrations/0013_adiciona_status_tramitacao.py, sapl/parlamentares/migrations/0007_adiciona_partidos.py podem ser removidas e colocadas em um script python que rode após todas as migrações. Eu nem colocaria isso mais como migration, pois a intenção foi pré-popular dados no SAPL.
da app compilação tá liberada... é um ajuste na base dados naquele ponto, após ou numa base nova, o ajuste é irrelevante...
Pretendíamos resetar as migrations nas versões médias (3.2, por exemplo), mais ou menos como descrito em https://github.com/interlegis/sapl/issues/976#issuecomment-289572613, mas as migrations contém diversas funções que fazem algum tipo de setup de dados nas bases
Estudar o que fazer e considerar fazer squash e otimizar manualmente, como sugere http://www.rkblog.rk.edu.pl/w/p/squashing-and-optimizing-migrations-django/
(Vide #976.)