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
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}`);
});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 .mjsMemory 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: falseinnext.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.
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://...
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
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.