Recentment ens hem topat amb un projecte que tenia un munt de migracions (unes 650) d'un munt d'aplicacions (unes 28). Resultava que aquest nombre tant elevat de migracions repercutia a l'hora de crear i aplicar migracions noves, fins al punt de durar més de 20 minuts, tant a l'hora de generar-les com d'aplicar-les.  

En un moment del desenvolupament del projecte, en el qual hem tingut els tres entorns (desenvolupament, pre-producció i producció) igualats a nivell de migracions, hem de decidit esborrar totes les migracions, inicialitzar la taula de migracions de Django, crear les migracions de les aplicacions "built-in" en mode "--fake", crear les migracions inicials de cada aplicació i, finalment, aplicar les migracions de totes les aplicacions en mode "--fake-initial". Els passos, de manera resumida, serien:

  1. Esborrar tots els directoris de "migrations" de totes les aplicacions
  2. Esborrar tots els registres de la taula "django_migrations" delete from django_migrations;
  3. Executar el migrate de les built-in apps de django: python manage.py migrate --fake
  4. Per a cada aplicació, generar la migració inicial: python manage.py makemigrations
  5. Finalment executar el fake de totes les migracions inicials generades: python manage.py migrate --fake-initial

El resultat ha estat que, migracions que tardaven més de vint minuts ara se generen i s'apliquen en qüestió de segons.


blog comments powered by Disqus