Support #25043
[multitenants] échec de migration des tenants
0%
Description
Connecté via pgpool2, le set_schema() de hobo/multitenant/management/commands/migrate_schemas.py ne sert à rien:
def run_migrations(self, schema_name, included_apps): if int(self.options.get('verbosity', 1)) >= 1: self._notice("=== Running migrate for schema %s" % schema_name) connection.set_schema(schema_name, include_public=False) command = MigrateCommand() command.execute(*self.args, **self.options) connection.set_schema_to_public()
La connexion est réinitiée dans django.core.management.commands.migrate sans le set_schema():
def handle(self, *args, **options): self.verbosity = options['verbosity'] self.interactive = options['interactive'] # Import the 'management' module within each installed app, to register # dispatcher events. for app_config in apps.get_app_configs(): if module_has_submodule(app_config.module, "management"): import_module('.management', app_config.name) # Get the database we're operating from db = options['database'] connection = connections[db] # Hook for backends needing any database preparation connection.prepare_database()
On pourrait profiter du hook prévu, pour faire une sous-classe simple et tenant-aware.
Historique
Mis à jour par Benjamin Dauvergne il y a presque 6 ans
C'est étonnant car ça marche sans pgpool2, pourquoi le fait d'utiliser pgpool2 ferait que django.db.connection != connections[db]
? Ici j'ai l'impression que tu supposes qu'en recherchant la db par son nom, ici certainement 'default' on aurait pas la même connection, dans mon souvenir de lecture de ce code le dictionnaire connections est thread local, mais au sein d'un même thread on obtient toujours la même connection tant qu'on ne fait pas .close()
.
Mis à jour par Christophe Siraut il y a presque 6 ans
- Statut changé de Nouveau à Rejeté
set_tenant fonctionne bien, mon problème est ailleurs.
Mis à jour par Frédéric Péters il y a presque 6 ans
En excluant des changements de packaging, le diff actuel me semble pointer comme seul changement #9891 (mais le fork existait déjà, pour je ne sais pas quelle raison d'alors).