Manca la migrazione di base: su DB vuoto il container server non parte #6
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
GRAVITÀ: alta
FILE: src/backend/migrations/versions/001_add_image_path_to_recipe_and_subtask.py:20 ; Dockerfile:36-40
COSA: la catena Alembic parte con
add_columnsurecipes; il CMD èalembic upgrade head && uvicorn. Su DB vuoto alembic fallisce, uvicorn non parte,/api/setup/init-db(l'unicocreate_all, setup.py:242) non è raggiungibile.INPUT: prima installazione su MySQL vuoto (il caso on-premise dal cliente).
VERIFICATO: catena su SQLite vuoto → "Running upgrade -> 001_image_path" poi "OperationalError no such table: recipes".
grep -n "stamp|has_table"su migrations, main.py, setup.py → 0.PRESUNTO: con tabelle nate da
create_allsenzaalembic stamp, al riavvio la 001 va in "Duplicate column" e il container entra in crash loop.ORIGINE: revisione fable del 21/09/2026 su ramo
V3.0.0, commit8cc5e82. Documento completo:_output/2026-09-21-TieMeasureFlow-revisione.mdsu Wasabi.⚡ jeeg — preso in carico 2026-09-21T20:22:11Z
ramo:
lavoro/jeeg· capacità: docker, gpu, systemdANALISI (passo 1) — ramo
lavoro/jeeg, worktree~/lavoro/TieMeasureFlowsu jeeg, lotto A2MODIFICHE: nuova migrazione
src/backend/migrations/versions/000_base_schema.py(revision "000_base", down_revision None) e001condown_revision = "000_base". La 000 crea lo schema COM'ERA PRIMA della 001 solo se il DB è vuoto: usasa.inspect(bind).has_table("recipes"); se la tabella esiste non fa nulla. Lo schema base va scritto esplicito (create_table delle tabelle e colonne pre-001: ricavale dai modelli ORM togliendo ciò che le migrazioni 001–013 aggiungono), NON conBase.metadata.create_all(creerebbe già le colonne delle migrazioni successive e la 001 andrebbe in Duplicate column). Inoltre src/backend/api/routers/setup.pyinit-db(righe ~242 e ~676): dopocreate_allesegui l'equivalente dialembic stamp head(command.stamp con la config di src/backend/migrations/alembic.ini), così un DB nato da create_all non rilancia le migrazioni.TEST: nuovo test: catena completa
upgrade headsu SQLite vuoto → riesce e le tabelle coincidono conBase.metadata(nomi tabella e colonne). Secondo test: DB esistente conrecipesgià presente allo stato pre-001 → la 000 non fa nulla.NON TOCCARE: Dockerfile (lotto C2).
Soluzione
ESITO: fatto
COSA: Nuova migrazione
000_base_schema.pycon lo schema pre-001 esplicito, no-op serecipesesiste; la 001 ora discende da000_base.init-dbereset-dbfannoalembic stamp headdopocreate_all. Test: upgrade head da SQLite vuoto produce tabelle e colonne uguali a Base.metadata; DB pre-001 esistente → 000 no-op. Verificato anche nell'immagine:alembic heads→ 014.COMMIT (ramo lavoro/jeeg, unito su V3.0.0 a
d483fa1):e202995PROVA:
uv run --extra server --extra client --extra dev pytest -q→ 622 passed, 4 skipped (erano 391); visione su Python 3.13 → 16 passed (erano 8).