-
Notifications
You must be signed in to change notification settings - Fork 102
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Evolution BDD et migrations #880
Comments
J’ai commencé à travailler sur la gestion des migrations avec Alembic (et Flask-Migrate pour l’intégration d’Alembic dans Flask). |
Hello à tous, |
À priori pas de soucis pour faire des modifications :
|
Oui, il faut aussi veiller à ce que chaque application tierce (UsersHub, TaxHub...) soit installable et puisse être mis à jour indépendamment, si ils sont utilisés sans GeoNature. Concernant les SQL de mises à jour, ils sont normalement tous génériques, les éventuelles adaptations spécifiques à chaque instance sont à gérer à part, après la mise à jour. |
Premier exemple d’utilisation de Flask-Migrate / Alembic pour UsersHub :
Note : les fichiers SQL de création du schéma et d’insertion de données minimal / d’exemple ont été copié de UsersHub à UsersHub-authentication-module puisque c’est ce dernier module qui gère le schéma. La raison derrière cela est de permettre à d’autres applications telle que TaxHub qui dépendent du schéma utilisateurs de pouvoir créer ce dernier sans devoir installer UsersHub mais uniquement le module UsersHub-authentication-module (qui par ailleurs contient le models.py). |
Création des migrations pour TaxHub : 3bd7b0e031bb5a6960bdc0ce2fa59823b019be67 La migration Il y a une petite astuce pour le mode « foreign » (schéma utilisateurs externe) : on saute la création du schéma utilisateurs et on indique à Alembic que la migration a bien été appliquée (/!\ pas encore testé). |
Créations des migrations pour : GeoNature a un fichier de configuration Alembic allant chercher les migrations de tous les modules : Le fichier
|
Intégration d’alembic à GeoNature sur la branche develop : a7cdeaf
|
Plusieurs avancées :
Pour plus d’informations sur l’utilisation d’alembic, voir la documentation de GeoNature qui a été mise-à-jour en conséquence. Je mettrais très prochainement le processus d’installation de GeoNature à jour pour ne plus installer le schéma La prochaine étape sera l’installation du schéma |
Mis en place dans la 2.8.0. Cela va permettre de simplifier la gestion et l'application des évolutions de la BDD. Pour les schémas, tables et vues custom, voir #1499 Reste une discussion/réflexion en cours sur le fait que c'est désormais GeoNature qui se charge de lancer les évolutions des schémas |
Jusqu'à présent à chaque évolution de la BDD de GeoNature, on écrit à la main des scripts SQL permettant de'appliquer manuellement les évolutions de la BDD entre chaque versions : https://github.com/PnX-SI/GeoNature/tree/master/data/migrations
Dans le cadre du workshop "Industrialisation" de février 2020, il a été envisagé d'automatiser les migrations de la BDD avec des solutions Python comme Flask-Migrate. Cependant la BDD de GeoNature est au coeur du projet et le pilote, et elle contient beaucoup de fonctions, de triggers et de vues qui ne sont pas migrables automatiquement. Même si cela n'est pas totalement incompatible, cette solution de Flask-Migrate a semblé peu adaptée et a été écartée.
Une solution maison a été mise en place pour gérer et automatiser l'application des mises à jour de la BDD, détaillée par @gildeluermoz :
Différents cas :
La base n'est pas prête (prochaine version, la base n'aura pas la table
gn_commons.t_migrations
)La base est déjà à jour
Une erreur se produit durant l'exécution d'un des scripts
Tout se passe comme prévu
Un seul script pour le moment :
install_db.sh
. Je vais le renommersetup_db.sh
car il gère install et migration)Stratégie :
/geonature/data/migrations
(sh) ou dans une arborescence/usr/share/geonature/geonature-db/sql/migrations/
(.deb)config/settings.ini
(rétrocompatibilité) soit de/etc/geonature/geonature-db.conf
pour le .deb. Les variables actuelles dans lesettings.ini
sont converties en variable d'environnement. Pour la création de la BDD, si aucun fichier de config n'est disponible le script prompt l'utilisateur.gn_commons.t_migrations
d'une ligne avec ce N° correspondant à la version de la base (N°= xx comme dans le nom du script).TODO
Tout est actuellement dans la branche "deb_compat" du dépôt GeoNature (https://github.com/PnX-SI/GeoNature/commits/deb_compat).
The text was updated successfully, but these errors were encountered: