Root cause (confirmed on local): even with psycopg installed, SQLAlchemy raises: NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:postgres when DATABASE_URL uses the bare 'postgres://' scheme, because SQLAlchemy only resolves 'postgresql+driver://'. The deploy's DATABASE_URL was 'postgres://...', so alembic upgrade head (run by the entrypoint before starting services) crashed and the worker crash-looped in supervisor. Fix: - create_database_engine now normalizes 'postgres://' and legacy 'postgres+pq://' to 'postgresql+psycopg://' so a bare postgres scheme works as long as psycopg is installed. - Dockerfile build step now verifies psycopg imports after 'uv sync' (fails the build loudly instead of a runtime crash-loop). - Tests: 4 for URL normalization; backend suite now 201 passed.
1.3 KiB
1.3 KiB