DocumentationMumbai
Diagnostic Guide
Root Cause & Remediation

Troubleshooting & Error Recovery

When deployments fail or return unexpected status codes, this guide provides the exact root causes, log patterns, and copy-pasteable code fixes for the most common issues across Next.js, Node.js, and containerized runtimes.

Where to Find Your Logs

Exovon separates your application telemetry into two distinct streams:

1. Build Logs

Captures dependency installation (npm ci), TypeScript checks, and compiler stdout/stderr during container creation. Accessible under Deployments → [Deployment Node].

2. Runtime Logs

Streams live container stdout/stderr, uncaught exceptions, and HTTP request access logs directly from Exovon Container Runtime in Mumbai (asia-south1). Accessible under Runtime Logs.

The Top 8 Common Errors & Solutions

Error 1 • HTTP 502 Bad Gateway

Container Failed to Bind to PORT 8080

Symptom: Deployment completes, but navigating to your domain returns a 502 Bad Gateway or Application Offline error.

Root Cause: Your application hardcoded listening to localhost:3000 or failed to bind to 0.0.0.0. Cloud Run and the Exovon Edge Router forward traffic to the container port defined by process.env.PORT (defaulting to 8080).

The Fix (Express / Node.js):

const port = process.env.PORT || 8080;
const host = '0.0.0.0'; // Must bind to 0.0.0.0, NOT 127.0.0.1 or localhost

app.listen(port, host, () => {
  console.log(`Server actively listening on http://${host}:${port}`);
});
Error 2 • Build Error

Next.js Missing Standalone Output

Symptom: Build logs fail during packaging with message: Could not find .next/standalone/server.js.

Root Cause: Exovon compiles Next.js into high-performance, lightweight microcontainers (~85 MB) using Next.js standalone mode. This requires output: 'standalone' in your Next.js config.

The Fix (next.config.js / next.config.mjs):

/** @type {import('next').NextConfig} */
const nextConfig = {
  output: 'standalone', // Enables standalone container bundling
  // Optional: keep images optimized
  images: {
    formats: ['image/avif', 'image/webp'],
  },
};

module.exports = nextConfig; // or export default nextConfig in .mjs
Error 3 • Exit Code 137

Memory Limit Exceeded (Out Of Memory)

Symptom: Build halts abruptly with Process terminated with signal SIGKILL (Exit code 137).

Root Cause: Compiling large codebases with heavy client-side source maps or unoptimized Webpack plugins exceeded the build container RAM limit.

The Fix:

  • Disable browser source maps in production: productionBrowserSourceMaps: false in next.config.js.
  • Add NODE_OPTIONS="--max-old-space-size=4096" to your project's Environment Variables.
  • Upgrade to the Pro Plan to unlock 8GB/16GB high-memory compilation runners.
Error 4 • Configuration

Variable Returns 'undefined' in Browser

Symptom: An API key or configuration variable is set in the Exovon Console, but in the browser console it prints undefined.

Root Cause: For security, Exovon keeps all environment variables strictly on the serverless container backend. Next.js and Vite intentionally strip variables from browser bundles unless prefixed.

The Fix:

# For Next.js client-side code:

NEXT_PUBLIC_API_URL=https://api.exovon.in

# For Vite / React client-side code:

VITE_SUPABASE_URL=https://...

Error 5 • Dependency Resolution

npm ci / ERESOLVE Dependency Tree Conflict

Symptom: Build logs show: npm ERR! code ERESOLVE or package-lock.json out of date.

Root Cause: Conflicting peer dependencies or an outdated lockfile. Exovon uses npm ci for reproducible zero-drift builds.

The Fix:

# Run locally and commit the updated lockfile:

npm install --package-lock-only

git add package-lock.json && git commit -m "fix: update lockfile" && git push

Error 6 • HTTP 504 Gateway Timeout

Serverless Function Exceeded Maximum Execution Time

Symptom: A specific API route or Server Action hangs until your plan's request timeout limit is reached and returns 504 Gateway Timeout.

Root Cause: The edge router imposes request timeouts based on your plan tier (10s on Free, 30s on Starter, 60s on Pro, and 120s on Heavy). Requests exceeding your plan's timeout are terminated with a 504 status. Common causes include unindexed database queries, blocking third-party API calls, or connection pool exhaustion.

The Fix:

  • Use the ExoStore Serverless HTTP driver (@neondatabase/serverless) to eliminate TCP pool timeouts.
  • Add database indexes on frequently queried columns (CREATE INDEX idx_user_id ON orders(user_id)).
  • Offload heavy jobs (video processing, bulk emails) to asynchronous background workers.

Frequently Asked Questions

How do I rollback a broken deployment in an emergency?

Open your project dashboard, go to the Deployments tab, find the previous stable deployment hash, and click 'Rollback'. Traffic routing switches instantly in under 3 seconds with zero rebuild wait.

Why does my build succeed locally but fail on Exovon?

Local machines often have case-insensitive filesystems (macOS/Windows) or globally installed CLI packages. Exovon builds run inside strict Linux containers. Ensure your file import paths match casing exactly (e.g., ./Button vs ./button) and all dependencies are in package.json.

Was this documentation page helpful?