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)

  1. Azure Portal → Container App tesseracmsLog stream
  2. Live-stream af stdout/stderr fra alle replicas
  3. 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

  1. Tjek Container App scaling — har den hit max replicas? Bump max.
  2. Tjek Azure Storage throttling — Storage Explorer → Metrics. 429-rates angiver throttling.
  3. Tjek public-page Caching — vi cache'r ikke aggressively i v1. For high-traffic tenants overvej CDN foran.

Slow admin-flows

  1. 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.
  2. 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:

  1. Azure Storage Explorer → ContentItems-tabel
  2. Find PartitionKey = <slug>:<type>, RowKey = <id>
  3. Den brudte felter ligger som JSON-strings under data (eller individuelt for legacy fields)
  4. Manuelt rette → Save
  5. 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.