Closed TheoLechemia closed 5 years ago
Putôt que de créer le paramètre USE_AS_SUBMODULE
, est-ce qu'il ne serait pas possible de rendre l'affaire totalement transparente en testant si une instance a été reçue ou pas. Si pas reçue, elle est créée.
En effet, c'est fait dans le commit précédent.
Cool ! Bien joué. Comme ça c'est transparent.
Depuis le passage à Flask 1.x on avait de gros problème de sessions et de connexions à la BDD en développement. Le nombre de connexions à la base était trop important, ce qui causait un crash de l'appli:
TimeoutError: QueuePool limit of size 5 overflow 10 reached, connection timed out, timeout 30
En investiguant, c'était un problème d'instance de "DB SQLAlchemy" entre les sous-modules. Chaque sous module (nomenclature, et authentification) créait sa connexion à la base. J'ai solutionné le problème en passant l'instance DB au sous-modules via la configuration de l'application mère (peut-être pas très commun, mais ça fonctionne).Pour que le sous module fonctionne, l'instance de l'application mère doit donc passer une variable DB à sa configuration, qui pointe vers l'instance de connexion SQLAlchemy, crée une et une seule fois.
Exemple, dans GeoNature a l'interieur de l'app factory:
Et dans le sous module, on récupère l'instance comme ceci
DB = current_app.config['DB']
Il toujours possible d'utiliser le sous-module comme une application indépendante, dans ce cas, on utilise l'instance DB créée dans le ficher env.py, et on passe le paramètre
USE_AS_SUBMODULE=False
dans le fichierconfig.py
On utilise ensuite une instance différente de DB en fonction de la configuration