codicoop / boilerplate_django

Plantilla pels nous projectes web amb Django.
GNU General Public License v3.0
0 stars 0 forks source link

Bug: automatic createsuperuser #12

Closed nabiu256 closed 2 years ago

nabiu256 commented 2 years ago

Provant d'implementar aquesta versió de la boilerplate al projecte de l'app interna m'he trobat amb un bug que no havia tingut en compte a l'hora d'implementar la creació del superuser amb migracions: hardcodejar la creació en una migració es buggeja immediatament en el moment en que en l'app modifiques del model de User i s'han de crear noves migracions per modificar-lo.

He provat de fer una única modificació, que és afegir un charField al model User. A l'intentar fer la creació del superuser durant la primera migració, que encara és on està, es queixa (òbviament) de que la columna name no existeix.

Una manera que se m'ha ocorregut de solucionar el problema és la següent: separar la creació de superuser en una migració que vagi per separada, i posar-li manualment com a dependència sempre l'última migració creada. Això tanmateix contrarresta l'utilitat que tenia automatitzar aquest procés.

L'altre manera que seria tornar a la idea de crear el super user amb la comanda python manage.py createsuperuser --no-input.

nabiu256 commented 2 years ago

He trobat la solució, i efectivament passa per la segona opció presentada anteriorment.

Modificant el command del contenidor develop_django_boilerplate_startup_commands pel següent image permet que siguin quines siguin les modificacions que es faci del model User, el createsuperuser sempre es fa al final i per tant ha de ser correcte. A més, amb aquesta versió, a més d'un migrate es fa també un makemigrations, amb que les modificacions extres que no s'hagin tingut en compte s'aplicaran automàticament al aixecar el contenidor de zero.

Ho acabaré de polir i faré un push a develop per solucionar-ho, que és un bug bastant crític.

@perepicornell , potser t'interessa llegir això ja que tot i que ara ja tot hauria de seguir funcionant normal, és un canvi significatiu d'una feature que vam comentar juntis.

nabiu256 commented 2 years ago

De fet se m'havia oblidat que aquesta solució porta a un altre problema, que és que a no ser que facis un docker-compose down cada vegada, el superuser es manté creat i la segona vegada que s'intenta crear dona error al ja existir.

Recordo que la solució en el seu moment que havia vist era fer un script que primer comprovi si ja està creat o no, però per aquesta banda seguia topant amb un problema quan ho vaig provar, tot i que no crec que sigui gaire difícil de solucionar. Seguiré mirant. En tot cas de moment funciona mentre això, es faci docker-compose down cada vegada.