← Hjem

Hvorfor appen din fungerer lokalt men feiler i produksjon

Ekte årsaker og konkrete løsninger. AI optimaliserer for en fungerende demo, ikke et produksjonssystem. Med 15–30 stille arkitekturbeslutninger per feature med ~70% nøyaktighet hver, er sannsynligheten for at ALLE er korrekte praktisk talt null.

⏱ 15 min lesing

«Det fungerer på maskinen min» er den eldste vitsen innen programvareutvikling. Med AI-genererte apper er det ingen vits — det er standardtilstanden. AI tenker ikke på produksjon. Den vet ikke hva en lastbalanserer, tilkoblingspool eller hemmelighetsbehandler er. Den ser bare én ting: din lokale kontekst, din fil, ditt forsøk på å kjøre den.

Når AI bygger en feature, tar den 15–30 stille arkitekturbeslutninger: hvilken database, hvordan koble til et API, hvor lagre nøkler, hvordan håndtere feil. Hver beslutning har omtrent 70% sjanse for å være korrekt. Men for at hele featuren skal fungere i produksjon, må alle beslutninger være korrekte. Sannsynligheten? Med 20 beslutninger: 0.7^20 = 0.08%. Praktisk talt null.

Denne artikkelen dekker de seks vanligste grunnene til at AI-apper fungerer lokalt og krasjer i produksjon — med konkrete eksempler og løsninger. Hvis du bygger med Cursor, Bolt, Lovable, Replit eller et annet AI-verktøy, er denne guiden for deg.

01

Miljø og konfigurasjon

Dette er den mest åpenbare og samtidig vanligste årsaken til produksjonsfeil: konfigurasjon som bare fungerer lokalt. .env-filen din på laptopen har ekte API-nøkler, korrekte URL-er, fungerende hemmeligheter. I produksjon? Plassholdere, manglende variabler eller helt andre adresser.

AI tenker aldri på konfigurasjonshåndtering — den ser bare lokal kontekst. Når den genererer kode som kobler til et API, skriver den http://localhost:3000 direkte i koden. Når den trenger en API-nøkkel, oppretter den en variabel med en standardverdi. Når den bygger en database-URL, hardkoder den tilkoblingsstrengen.

Typiske problemer:

Konfigurasjon

Din lokale .env har ekte nøkler. Produksjon kan ha plassholdere, feil URL-er eller manglende hemmeligheter. AI tenker aldri på konfigurasjonshåndtering — den ser bare lokal kontekst.

Slik fikser du det

Eksternaliser ALL konfigurasjon. Hver URL, hver nøkkel, hver hemmelighet bør komme fra en miljøvariabel — aldri fra kildekode. Bruk en hemmelighetsbehandler (f.eks. Doppler, AWS Secrets Manager, Vercel Environment Variables). Opprett en .env.example-fil med navnet på hver påkrevd variabel (uten verdier) og legg den til i repoet som dokumentasjon.

02

Databaseantakelser

AI elsker SQLite. Den er enkel, krever ingen server, det er bare en fil. Perfekt for en prototype. Problemet? Serverløse plattformer (Vercel, Netlify Functions, AWS Lambda) støtter ikke SQLite fordi hver forespørsel kan treffe en annen instans — det finnes ikke noe delt filsystem.

Men databasen er ikke bare motoren. Det er et helt sett med antakelser AI gjør stille:

SQLite

AI bruker SQLite fordi den ikke krever noen server. Men serverløse plattformer bryter SQLite — hver forespørsel kan treffe en annen instans uten delt filsystem. Spørringer som fungerer på 50 rader tar 30 sekunder på 50 000 uten indekser.

Slik fikser du det

Bruk PostgreSQL eller MySQL i produksjon. Konfigurer tilkoblingspooling (PgBouncer, Supabase har det innebygd). Legg til indekser på kolonner brukt i WHERE og JOIN. Planlegg en migrasjonsstrategi — bruk et verktøy som Prisma Migrate, Drizzle eller vanlige SQL-filer med versjonering. Modifiser aldri produksjonsskjemaet manuelt.

03

Sikkerhet som ikke eksisterer

En Georgetown CSET-studie fant at 45% av AI-generert kode inneholder sikkerhetssårbarheter. Dette er ikke et marginalt problem — det er nesten halvparten av all kode. Og kode som «fungerer» på localhost trenger ikke være sikker.

En skanning av 5 600 vibe-kodede apper avslørte over 2 000 høyrisikobrister og over 400 eksponerte hemmeligheter. Plattformen Moltbook eksponerte 1,5 millioner API-nøkler — Row Level Security på Supabase ble aldri aktivert. Lovable hadde invertert tilgangskontroll over 170 produksjonsapper (CVE-2025-48757): autentiserte brukere ble blokkert mens uautentiserte fikk full tilgang.

Problemer jeg ser regelmessig:

Sikkerhet

45% av AI-kode inneholder sikkerhetssårbarheter. Skanning av 5 600 vibe-kodede apper: 2 000+ høyrisikobrister, 400+ eksponerte hemmeligheter. Lovable hadde invertert tilgangskontroll over 170 produksjonsapper.

Slik fikser du det

Kjør en OWASP Top 10-gjennomgang. Aktiver Row Level Security på Supabase. Valider alle inputs på serversiden (stol aldri på klienten). Skann repoet ditt etter eksponerte hemmeligheter (bruk gitleaks eller trufflehog). Legg til rate limiting på alle offentlige endepunkter. Flytt API-nøkler fra frontend til backend.

04

Stille feil og ressurslekkasjer

Applikasjonen din fungerer for de første 100 forespørslene. Forespørsel nummer 1 001 forårsaker en krasj — alle databasetilkoblinger er uttømt. Hvorfor? Fordi AI aldri lukket dem. Hver forespørsel åpnet en ny tilkobling, men ingen frigav den.

Det samme gjelder filhåndtak, WebSocket-lyttere, timere og abonnementer. AI oppretter ressurser men frigir dem ikke. På localhost legger du ikke merke til det fordi serveren startes på nytt hvert par minutt og tilbakestiller alt. I produksjon kjører serveren kontinuerlig — og ressursene tar slutt.

Enda verre er stille feil:

Ressurslekkasjer

Databasetilkoblinger som aldri lukkes. Filhåndtak som blir stående åpne. WebSocket-lyttere som aldri ryddes opp. Fungerer for de første 100 forespørslene — forespørsel 1 001 krasjer fordi alle tilkoblinger er uttømt.

Slik fikser du det

Legg til error boundaries på frontend (React: ErrorBoundary). Legg til en global feilbehandler på backend (process.on('uncaughtException')). Distribuer strukturert logging (Sentry, LogRocket, Pino). Lukk databasetilkoblinger etter bruk (eller bruk tilkoblingspooling). Rydd opp lyttere og timere i useEffect cleanup. Belastningstest — å sjekke at det fungerer én gang er ikke nok.

05

Skadene i virkeligheten

Dette er ikke teoretiske trusler. Dette er hendelser som allerede har skjedd:

Kostnader

AI lovet 10x-utviklere. I stedet: juniorer ble promptingenjører, seniorer ble kodevaskere. Kostnaden for å fikse AI-kode overstiger ofte kostnaden for å skrive den fra bunnen av.

Mønsteret gjentar seg: AI genererer kode som ser bra ut. Den består kodegjennomgang (fordi den er lesbar). Den består tester (fordi den tester den lykkelige stien). Så eksploderer den i produksjon fordi ingen sjekket ytelse under belastning, feilhåndtering, sikkerhet eller infrastrukturkostnader.

06

Hvordan du faktisk fikser det (produksjonsklar sjekkliste)

Før du ruller ut applikasjonen din, gå gjennom disse punktene. Hvert uoppfylt punkt er en potensiell produksjonsfeil. Denne sjekklisten ble bygd fra dusinvis av AI-apprevisjoner jeg har utført for kunder.

Vanlige spørsmål

Hvorfor fungerer alt perfekt på localhost?

Fordi localhost er et perfekt miljø: same-origin (ingen CORS), null nettverkslatens, dev-modus maskerer advarsler, du er den eneste brukeren (ingen race conditions, ingen belastning). I produksjon er hvert av disse vilkårene annerledes — og hvert av dem kan forårsake en feil.

Hva er den vanligste produksjonsfeilen?

Manglende miljøvariabler og hardkodet konfigurasjon. Det er trivielt, men det står for hoveddelen av «fungerer lokalt, feiler i produksjon»-problemene. .env-filen din har nøkler — produksjonsserveren har det ikke. AI hardkoder URL-er i kildekoden i stedet for å bruke miljøvariabler.

Hvordan vet jeg om appen min er produksjonsklar?

Enkelt spørsmål: hvis du ikke kan svare på «hva skjer når X feiler?» for hver kritisk sti, er appen din ikke klar. Hva skjer når databasen er utilgjengelig? Når Stripe-API-et returnerer en feil? Når 100 brukere klikker «Kjøp» i samme sekund? Hvis du ikke har svar — har du arbeid å gjøre.

Bør jeg skrive om fra bunnen av?

Vanligvis ikke. Start med en revisjon. Identifiser kritiske mangler (sikkerhet, database, konfigurasjon). Fiks dem punkt for punkt. En fullstendig omskriving gir bare mening når arkitekturen er fundamentalt feil — men i de fleste tilfeller kan du fikse eksisterende kode iterativt uten å tape arbeidet som er gjort så langt.

Kan jeg distribuere til Vercel/Netlify og kalle det produksjon?

Plattform er ikke lik produksjonsklar. Vercel og Netlify er flotte hostingverktøy, men hosting alene er ikke «produksjon». Du trenger fortsatt riktig CORS-konfigurasjon, overvåkning, feilhåndtering, sikkerhet, en skikkelig database og belastningstesting. «Deploy»-knappen er begynnelsen, ikke slutten.

Appen din fungerer lokalt men feiler i produksjon?

Vi hjelper deg identifisere og fikse hvert av disse problemene. Revisjon, fiks, distribusjon — fra prototype til produksjon.

Bestill en gratis samtale →
Gratis konsultasjon Helt uforpliktende Svar innen 24t