Troubleshoot
3. Troubleshoot
TesseraCMS kører hyppigt godt — men når det ikke gør, skal du vide hvor du finder logs, hvilke fejl der er almindelige, og hvad du gør. Denne side er en running troubleshoot-bog.
Hvor finder jeg logs
Container App logs (Azure)
- Azure Portal → Container App
tesseracms→ Log stream - Live-stream af stdout/stderr fra alle replicas
- Brug Logs-blade'en for historisk query (KQL)
Nyttige KQL-queries:
// Sidste 100 errors
ContainerAppConsoleLogs_CL
| where Log_s contains "ERROR" or Log_s contains "error:"
| order by TimeGenerated desc
| take 100
// Filter på en specifik tenant
ContainerAppConsoleLogs_CL
| where Log_s contains "palle_jacobsen"
| order by TimeGenerated desc
GitHub Actions logs
Deploy-fejl: GitHub → Actions → seneste run. Fejl i build-step er typisk TypeScript-fejl; fejl i deploy-step er Azure-CLI-fejl.
Browser dev-tools
For klient-side issues: åbn dev-tools (F12), tjek Console + Network. Hvis en page render fejler kun for visse brugere, det er typisk en hydration mismatch.
Common errors og fix
"TableNotFound"
Årsag: en Azure Storage-tabel mangler. Sker oftest efter første-deploy mod fresh storage.
Fix: kør scripts/ensure-prod-tables.ts der opretter alle nødvendige tabeller idempotent.
npx tsx scripts/ensure-prod-tables.ts
"Adgang nægtet" for ny bruger
Årsag: brugeren har AAD-konto men ingen TenantRole.
Fix: tjek /admin/users om brugeren findes. Hvis ja, tildel rolle. Hvis nej, send dem en ny invite (de skal måske acceptere invitation først).
Side viser "500 Internal Server Error"
Årsag: server-side render-fejl.
Fix: tjek Container App logs for den specifikke fejl. Ofte:
- Missing env-var (fx
AZURE_STORAGE_CONNECTION_STRING) - Storage-tabel der mangler
- Korrupt content-record (manuel rette via Storage Explorer)
"Cannot find module 'archiver'" (eller anden CJS-pakke)
Årsag: Next.js standalone-build sporer ikke transitive CJS-dependencies.
Fix: tilføj import "<pakke>" som side-effect-import i en af koden's entry-points, så Next sporer den. Se TASK-122 history.
Tenant viser default-redirect i stedet for site
Årsag: enten Tenants-row mangler, eller customDomains-felt er ikke sat korrekt.
Fix: tjek Tenants-tabellen direkte i Azure Storage Explorer. Hvis kunden bruger custom domain, tjek customDomains-array indeholder den eksakte hostname.
Performance-issues
Slow page loads
- Tjek Container App scaling — har den hit max replicas? Bump max.
- Tjek Azure Storage throttling — Storage Explorer → Metrics. 429-rates angiver throttling.
- Tjek public-page Caching — vi cache'r ikke aggressively i v1. For high-traffic tenants overvej CDN foran.
Slow admin-flows
- Tjek query-mønstre — vi har sentry-style tracing i koden men ikke aktivt opsat. For nu: console-log i dev og kig på Container App logs i prod.
- Tjek table-scan vs partition-scan — partition-scan er hurtig (per-tenant); table-scan over alle tenants er langsom. /admin/users gør sidstnævnte; det er kendt langsom for mange tenants.
Storage-issues
Bryude content (manuel JSON-edit nødvendig)
Indimellem en content-migration laver et record til en ugyldig tilstand. Direkte fix:
- Azure Storage Explorer → ContentItems-tabel
- Find PartitionKey =
<slug>:<type>, RowKey =<id> - Den brudte felter ligger som JSON-strings under
data(eller individuelt for legacy fields) - Manuelt rette → Save
- Hard-refresh public page for at se ændringen
Backup ALTID før du gør det — så du har vej tilbage hvis du fucker det op.
Blob-orphans
Når en page slettes mens den refererer billeder, kan billederne hænge i blob-storage som orphans (ikke catastrophic; bare storage-cost).
For at ryde op: kør scripts/audit-tenant-modules.ts (eller en orphan-audit hvis nogen har skrevet en) der lister blobs uden references.
Når du IKKE kan finde fejlen
Dokumentér hvad du har prøvet i en troubleshoot-<dato>.md under sharefolder/ — så har du en spor at fortsætte fra. Inkluder:
- Symptom (fra brugerens perspektiv)
- Hvad du har tjekket og udelukket
- Hvad du tror der sker
- Næste skridt
Hvis du er stuck og det er prod-incident, roll back først (forrige deploy via GitHub Actions → re-deploy) og fejl-find bagefter på et test-env.