P0-fix: plugin migrations use migration engine (crm_migration) instead of API engine (crm_api)
Check Cross-Plugin Imports / check (push) Has been cancelled
Check Cross-Plugin Imports / check (push) Has been cancelled
- main.py: registry.initialize(get_migration_engine()) instead of get_engine() - main.py: plugin migrations run via get_migration_session_factory() not async_session() - registry.py: upgrade_plugin, install_plugin, uninstall_plugin all use migration session for DDL - db/__init__.py: get_migration_engine() raises RuntimeError if MIGRATION_DATABASE_URL missing (no fallback) - Fixes fresh-install failure: crm_api has no DDL rights, plugin migrations need crm_migration
This commit is contained in:
+10
-5
@@ -154,7 +154,8 @@ async def lifespan(app: FastAPI):
|
||||
|
||||
# Initialize plugin registry and discover built-in plugins
|
||||
registry = get_registry()
|
||||
registry.initialize(get_engine(), app)
|
||||
from app.core.db import get_migration_engine
|
||||
registry.initialize(get_migration_engine(), app)
|
||||
registry.discover_builtins()
|
||||
|
||||
# Install discovered builtin plugins and activate only those marked active in DB
|
||||
@@ -201,12 +202,16 @@ async def lifespan(app: FastAPI):
|
||||
await db.flush()
|
||||
logger.info(f"Created plugin record: {name} (core={plugin.manifest.is_core})")
|
||||
|
||||
# Run migrations if not yet applied
|
||||
# Run migrations if not yet applied — use MIGRATION engine (crm_migration) for DDL
|
||||
if plugin.manifest.migrations:
|
||||
try:
|
||||
await registry.migration_runner.run_all_migrations(
|
||||
db, name, plugin.manifest.migrations
|
||||
)
|
||||
from app.core.db import get_migration_session_factory
|
||||
mig_session_factory = get_migration_session_factory()
|
||||
async with mig_session_factory() as mig_db:
|
||||
await registry.migration_runner.run_all_migrations(
|
||||
mig_db, name, plugin.manifest.migrations
|
||||
)
|
||||
await mig_db.commit()
|
||||
except Exception as exc:
|
||||
logger.error(f"Migration FAILED for {name}: {exc}")
|
||||
if plugin_record.active:
|
||||
|
||||
Reference in New Issue
Block a user