> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sevalla.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> These are the docs for Sevalla, a platform for deploying applications, databases, static sites, object storage and load balancers. The dashboard is at https://app.sevalla.com.
> Bold text in steps is an exact dashboard label.
> To act on a Sevalla account, prefer the Sevalla MCP server (https://mcp.sevalla.com/mcp, see https://docs.sevalla.com/ai-agents/overview.md), then the Sevalla CLI (https://docs.sevalla.com/developer-tools/cli.md), then the REST API (https://api-docs.sevalla.com, OpenAPI spec at https://api.sevalla.com/v3/openapi.json).
> Every page index is at https://docs.sevalla.com/llms.txt.

# Error messages

> Look up an error message from the Sevalla API, a deployment, a database, Ingot, a framework or an AI tool, with its cause, its fix and the guide that covers it.

This page lists the error messages that the Sevalla guides cover, as Sevalla, Ingot, frameworks and tools print them, with the cause and the fix for each. Search the page for the text you got. A part in angle brackets, such as `<host>`, stands for text that varies. Each fix links to the section that explains it.

For an error that isn't listed, see [Troubleshoot builds and deployments](https://docs.sevalla.com/applications/troubleshooting/builds-and-deployments.md), [Troubleshoot Ingot builds](https://docs.sevalla.com/applications/builds/ingot.md#troubleshoot-ingot-builds), [Troubleshoot HTTP errors](https://docs.sevalla.com/applications/troubleshooting/http-errors.md), [Troubleshoot runtime errors](https://docs.sevalla.com/applications/troubleshooting/runtime-errors.md) and [Troubleshoot databases](https://docs.sevalla.com/databases/troubleshooting.md).

## Repository and API requests

| Error | Cause | Fix |
| - | - | - |
| `Cannot access repository <url>: Repository not found or you don't have access.` | No Git account connected to Sevalla can read the repository, or Sevalla's GitHub App doesn't have access to it. The request to create the application gets `400`. | Connect the Git account under **My account**, and give the GitHub App access to the repository. The message links to both pages. See [Deploy an agent with the OpenAI Agents SDK](https://docs.sevalla.com/guides/ai/openai-agents-sdk.md#troubleshoot). |
| `GraphQL: Could not resolve to a Repository with the name '<owner>/<repository>'. (repository)` | The repository name is misspelled, or the GitHub token can't reach the repository. | Fix the name, or add the repository to the token, then deploy. See [Run Claude Code on Sevalla](https://docs.sevalla.com/guides/ai/claude-code.md#troubleshoot). |
| `gh: Bad credentials (HTTP 401)` | The GitHub token in `GH_TOKEN` is wrong, revoked or expired. | Create a new token, update `GH_TOKEN`, then deploy. See [Run Claude Code on Sevalla](https://docs.sevalla.com/guides/ai/claude-code.md#troubleshoot). |
| `Request doesn't match the schema` | The API answers `400` because a field is missing or breaks the operation's rules. For example, the request to `createProcessV3` has no `scaling_strategy`, or a `db_name` is shorter than 2 characters. | Check each field against the operation's reference, then send the request again. See [Deploy an agent with the OpenAI Agents SDK](https://docs.sevalla.com/guides/ai/openai-agents-sdk.md#deploy-with-the-api) and [Deploy Langfuse](https://docs.sevalla.com/guides/ai/langfuse.md#troubleshoot). |
| `jobStartPolicy must be provided if the process type is job.` | The request to `createProcessV3` creates a job without `job_start_policy`. | Send `job_start_policy` with every job. See [Deploy an agent with the OpenAI Agents SDK](https://docs.sevalla.com/guides/ai/openai-agents-sdk.md#deploy-with-the-api). |
| `Environment variable with key "<key>" already exists` | The application already has a variable with that key, so the request to create it gets `400`. | Change the value with [update environment variable](https://api-docs.sevalla.com/v3/applications/update-environment-variable) (`updateEnvironmentVariableV3`) instead. See [Run Ollama](https://docs.sevalla.com/guides/ai/ollama.md#deploy-with-the-api). |

## Deployments and jobs

| Error | Cause | Fix |
| - | - | - |
| `Migrate has failed` | The deployment's `Migrate` job exited with an error: the migration raised one, or the application can't reach the database. | On the **Logs** tab, choose the `Migrate` process to read its output. Check that the internal connection exists and that `DB_URL` is set, then deploy again. See [A job has failed or timed out](https://docs.sevalla.com/applications/troubleshooting/builds-and-deployments.md#a-job-has-failed-or-timed-out) and [Deploy a Django application](https://docs.sevalla.com/guides/python/django/deploy.md#troubleshoot-the-deployment). |
| `Failed to deploy <process>.` | The new instances of the process didn't become ready within 20 minutes, so Sevalla kept the previous version running. The process kept crashing, ran out of memory, or failed its readiness probe. | Read the deployment's **Runtime logs**, or **App health** on the application, to see why the instances stopped. Fix the cause, then deploy again. See [Failed to deploy a process](https://docs.sevalla.com/applications/troubleshooting/builds-and-deployments.md#failed-to-deploy-a-process) and [Deploy n8n](https://docs.sevalla.com/guides/ai/n8n.md#add-a-readiness-probe). |

## Requests and timeouts

| Error | Cause | Fix |
| - | - | - |
| `524: A timeout occurred` | The application sent no bytes before Cloudflare's timeout ran out, so Cloudflare closed the request. A slow query, an external API that hangs, or a long task inside the request causes it. | Move long work to a background worker and answer at once, or stream the response so that bytes keep arriving. See [504 Gateway Timeout and Cloudflare error 524](https://docs.sevalla.com/applications/troubleshooting/http-errors.md#504-gateway-timeout-and-cloudflare-error-524) and [Deploy an agent with the Claude Agent SDK](https://docs.sevalla.com/guides/ai/claude-agent-sdk.md#troubleshoot). |
| `upstream connect error or disconnect/reset before headers. reset reason: <reason>` | Sevalla reached an instance of the web process, but nothing accepted the connection on its port. The server listens on another port or only on `localhost`, isn't listening yet, or crashed. During a deployment without a readiness probe, a new instance gets requests before its server listens, and they fail with `503`. | Make the server listen on `0.0.0.0` and on the `PORT` environment variable, and add a readiness probe so that instances get traffic only once they answer. See [502 Bad Gateway and upstream connect error](https://docs.sevalla.com/applications/troubleshooting/http-errors.md#502-bad-gateway-and-upstream-connect-error) and [Build RAG with pgvector](https://docs.sevalla.com/guides/ai/rag-pgvector.md#add-a-health-check). |
| `no healthy upstream` | No instance of the web process is ready, so requests get `503`. The process has 0 instances, is crashing, is still starting, or fails its readiness probe, for example while its database restarts. | Check **App health** and the **Processes** tab. When the probe fails because the database is down, the application answers again once the database is back, without a deployment. See [503 Service Unavailable](https://docs.sevalla.com/applications/troubleshooting/http-errors.md#503-service-unavailable) and [Build RAG with pgvector](https://docs.sevalla.com/guides/ai/rag-pgvector.md#troubleshoot). |

## Memory and sizes

| Error | Cause | Fix |
| - | - | - |
| `The app exited with code 137 (OOMKilled, SIGKILL).` | The process used more memory than its instance size allows, so it was killed. Strapi on **H1** does this, and its domain returns `503`. | Update the process to a size with more memory, such as **S1** or larger for Strapi, then deploy. See [The process runs out of memory](https://docs.sevalla.com/applications/troubleshooting/runtime-errors.md#the-process-runs-out-of-memory) and [Deploy a Strapi application](https://docs.sevalla.com/guides/javascript/strapi.md#troubleshoot). |
| `no healthy upstream`, and the process's exit code is `137` | The web process is too small, so the application runs out of memory while it starts: n8n on **H1**, or Langflow on a size smaller than **M1**. | Use **S1** or larger for n8n, and **M1** or larger for Langflow. See [Deploy n8n](https://docs.sevalla.com/guides/ai/n8n.md#troubleshoot) and [Deploy Langflow](https://docs.sevalla.com/guides/ai/langflow.md#troubleshoot). |

## Databases

| Error | Cause | Fix |
| - | - | - |
| `server closed the connection unexpectedly` | The database closed the connection. A restart, resize, password change or restore is running, or the database's external hostname appeared less than a minute ago and doesn't accept connections yet. | Wait until the database's status is **Ready**, then connect again. Retry a new external hostname for about a minute. See [Connections drop](https://docs.sevalla.com/databases/troubleshooting.md#connections-drop) and [Deploy an MCP server with TypeScript](https://docs.sevalla.com/guides/ai/mcp-typescript.md#deploy-with-the-api). |
| `password authentication failed for user "<user>"` | The password in the application's variables is out of date, for example after the database's password changed. Changing the password doesn't update connected applications. | Put the current password in `DB_URL` and `DB_PASSWORD`, then deploy. See [Authentication fails](https://docs.sevalla.com/databases/troubleshooting.md#authentication-fails) and [Build RAG with pgvector](https://docs.sevalla.com/guides/ai/rag-pgvector.md#troubleshoot). |
| `WRONGPASS invalid username-password pair or user is disabled.` | The Redis or Valkey password in the application's variables is out of date. The variables are copies, so changing the database's password doesn't update them. | Update `REDIS_PASSWORD` and `REDIS_URL` with the current password, then deploy. See [Authentication fails](https://docs.sevalla.com/databases/troubleshooting.md#authentication-fails) and [Use Redis from Node.js](https://docs.sevalla.com/guides/javascript/redis.md#deploy-and-verify). |
| `AUTH failed: WRONGPASS invalid username-password pair or user is disabled.` | The `valkey-cli` client from Debian 13 connects with `-u` and the `valkey://` URL, and sends an empty user name. | Pass the password in `REDISCLI_AUTH`, and the host and port with `-h` and `-p`. See [Run a swarm of agents](https://docs.sevalla.com/guides/ai/agent-swarm.md#let-agents-talk-without-github). |
| `NOAUTH HELLO must be called with the client already authenticated` | The application connects to Redis without a password, because `REDIS_PASSWORD` isn't set. | Add `REDIS_PASSWORD` with the database's password, then deploy. See [Use Redis from Node.js](https://docs.sevalla.com/guides/javascript/redis.md#deploy-and-verify). |
| `remaining connection slots are reserved for roles with the SUPERUSER attribute` | Every connection the database accepts is in use. Each instance of each process opens its own pool, and PostgreSQL keeps 3 connections for administration. | Add up the pools of every process at its largest instance count, and lower the pool size per instance when the total gets close to the database's `max_connections`. See [Use PostgreSQL from Node.js with Prisma](https://docs.sevalla.com/guides/javascript/prisma.md#size-the-connection-pool). |
| `DUMP payload version or checksum are wrong` | The Sevalla database runs an older Redis version than the database the data comes from, such as Heroku's, so `RESTORE` fails. | Create the Sevalla database with a newer version, then copy the data again. See [Migrate from Heroku](https://docs.sevalla.com/guides/migrate-from-heroku.md#copy-the-redis-data). |
| `permission denied to create extension "vector"` and `Must be superuser to create this extension.` | The database was created without **Enable pgvector extension**, which you can turn on only when you create a database. | Create a database with the extension turned on, connect the application to it, remove the connection to the old one, and deploy. See [Build RAG with pgvector](https://docs.sevalla.com/guides/ai/rag-pgvector.md#troubleshoot). |
| `expected 1536 dimensions, not 3072` | The embedding model returns vectors of another size than the `vector(1536)` column. | Use a model with 1,536 dimensions, or request them with `dimensions=1536`. See [Build RAG with pgvector](https://docs.sevalla.com/guides/ai/rag-pgvector.md#troubleshoot). |
| `column cannot have more than 2000 dimensions for hnsw index` | An HNSW index on a `vector` column takes up to 2,000 dimensions, so the index on `vector(3072)` for `text-embedding-3-large` fails. | Pass `dimensions=1536` to `client.embeddings.create()` to get shorter vectors from that model. See [Build RAG with pgvector](https://docs.sevalla.com/guides/ai/rag-pgvector.md#scale-the-vector-index). |
| `hnsw graph no longer fits into maintenance_work_mem after <n> tuples` | The index build has little memory: **DB1** gives it 15 MB (`maintenance_work_mem`), so a large build slows down. This is a notice, not an error. | Don't raise `maintenance_work_mem` on **DB1**. Give a large first load a larger database size. See [Build RAG with pgvector](https://docs.sevalla.com/guides/ai/rag-pgvector.md#scale-the-vector-index). |

## Ingot builds

| Error | Cause | Fix |
| - | - | - |
| `Ingot couldn't tell what kind of application this is` | The repository has no application code that Ingot recognizes, for example only a `config.yaml` and a `Dockerfile`. | Choose the **Dockerfile** build strategy before the first deployment. See [Deploy the LiteLLM proxy](https://docs.sevalla.com/guides/ai/litellm.md#deploy-to-sevalla). |
| `No start command found` | Nothing in the build path tells Ingot how to start the application. A Bun project without a committed `bun.lock` gets it too, because Ingot then builds it with npm and Node.js. | Set the web process's start command, `INGOT_START_CMD`, `start` in `ingot.json`, or a `web` entry in a `Procfile`. For Bun, commit `bun.lock`. See [Troubleshoot Ingot builds](https://docs.sevalla.com/applications/builds/ingot.md#troubleshoot-ingot-builds) and [Deploy a Bun application](https://docs.sevalla.com/guides/javascript/bun.md#prepare-the-project-for-sevalla). |
| `This workspace has several applications and no start script at its root: <applications>` | The application has no `INGOT_APP` variable, or the variable isn't **Available during buildtime**, so Ingot doesn't know which application of the workspace to build. | Add `INGOT_APP` with the application's folder, such as `apps/web`, select **Available during buildtime**, then deploy. See [Deploy a Turborepo monorepo](https://docs.sevalla.com/guides/javascript/turborepo.md#verify-the-deployment). |
| `✗ go.mod: no go version in this Ingot release satisfies ">=1.28.0" (newest known: 1.27.3)` | The `go` line in `go.mod` asks for a newer Go than Ingot knows, usually because a newer Go on your computer ran `go mod init` or `go get`. | Set the line to a release Ingot knows, for example with `go mod edit -go=1.27.0`, check that `go build` passes, and commit `go.mod`. See [Deploy a Gin application](https://docs.sevalla.com/guides/go/gin.md#troubleshoot). |
| `✗ rust-toolchain.toml asks for the "nightly" toolchain` | Ingot builds with stable Rust releases only. | Set `channel` to a stable line such as `"1.99"`, or to `"stable"`. See [Deploy an Axum application](https://docs.sevalla.com/guides/rust/axum.md#troubleshoot). |
| `global.json asks for SDK <version>, and its rollForward policy doesn't allow <versions>` | No .NET SDK that Microsoft services matches `sdk.version` and `rollForward` in `global.json`. | Set `rollForward` to `latestFeature`, or `sdk.version` to one of the SDKs the message lists. See [Deploy .NET applications](https://docs.sevalla.com/guides/dotnet/overview.md#pin-the-net-version). |
| `✗ go.mod requires modules, but go.sum is missing` | The repository has no `go.sum`. | Run `go mod tidy` and commit `go.sum`. See [Deploy a Gin application](https://docs.sevalla.com/guides/go/gin.md#troubleshoot). |
| `✗ mvnw has Windows (CRLF) line endings, so the build would fail running it` | The `mvnw` script was committed from Windows without line-ending normalization. | Add `mvnw text eol=lf` to `.gitattributes`, run `git add --renormalize mvnw`, and commit. See [Deploy a Spring Boot application](https://docs.sevalla.com/guides/java/spring-boot.md#troubleshoot). |
| `SvelteKit has no adapter that runs in a container` | The project still uses `adapter-auto` or another platform's adapter. | Switch to the Node.js adapter with `npx sv add sveltekit-adapter="adapter:node" --install npm`, then commit and push. See [Deploy a SvelteKit application](https://docs.sevalla.com/guides/javascript/sveltekit.md#verify-the-deployment). |
| `TanStack Start has no server to run` | The project doesn't have Nitro. | Run `npm install nitro`, add `nitro()` to the plugins in `vite.config.ts`, then commit and push. See [Deploy a TanStack Start application](https://docs.sevalla.com/guides/javascript/tanstack-start.md#verify-the-deployment). |
| `Qwik City has no server adapter, so its build makes nothing to run` | The project has no server adapter. | Run `npx qwik add node-server --skipConfirmation=true`, then commit and push. See [Deploy a Qwik City application](https://docs.sevalla.com/guides/javascript/qwik.md#verify-the-deployment). |
| `Astro builds for Vercel with @astrojs/vercel, which no server in the image can run` | The project still has another platform's adapter. The message can also name Netlify or Cloudflare Workers. | Remove the adapter, and add the Node.js adapter with `npx astro add node`. See [Deploy an Astro site](https://docs.sevalla.com/guides/javascript/astro.md#render-pages-on-demand). |
| `nuxt.config.ts sets Nitro's preset to "vercel", which builds for that platform rather than a server Ingot can run` | The Nuxt config sets `nitro.preset` to another platform's preset. | Remove `nitro.preset`, so that Nitro builds its default Node.js server. See [Deploy a Nuxt application](https://docs.sevalla.com/guides/javascript/nuxt.md#verify-the-deployment). |
| `x509: certificate signed by unknown authority` | Ingot's Node.js image has no root certificates for programs other than Node.js, such as `gh`. | Add `ca-certificates` to `packages.run` in `ingot.json`. See [Run Claude Code on Sevalla](https://docs.sevalla.com/guides/ai/claude-code.md#create-the-project). |

## JavaScript

| Error | Cause | Fix |
| - | - | - |
| `Middleware "strapi::session": App keys are required.` | The application has no `APP_KEYS` variable. | Add the six secrets the Strapi guide lists, then deploy. See [Deploy a Strapi application](https://docs.sevalla.com/guides/javascript/strapi.md#troubleshoot). |
| `EACCES: permission denied, mkdir '/app/.tmp'` | With the Dockerfile, `DATABASE_CLIENT` isn't set, so Strapi tries to create a SQLite database in the read-only application folder. | Set `DATABASE_CLIENT` to `postgres`, then deploy. See [Deploy a Strapi application](https://docs.sevalla.com/guides/javascript/strapi.md#troubleshoot). |
| `Error: missing secret key. A secret key is needed to secure Payload.` | The application has no `PAYLOAD_SECRET` variable, so pages return `500`. | Add `PAYLOAD_SECRET`, then deploy. See [Deploy a Payload application](https://docs.sevalla.com/guides/javascript/payload.md#troubleshoot). |
| `EnvValidationException: Validation failed for one or more environment variables`, followed by lines such as `Missing environment variable "APP_KEY"` | A variable that `start/env.ts` requires isn't set, or isn't **Available during runtime**. | Add it on the **Environment variables** tab, then deploy. The database variables come from the internal connection. See [Deploy an AdonisJS application](https://docs.sevalla.com/guides/javascript/adonisjs.md#troubleshoot). |
| `Value for environment variable "APP_URL" must be a valid URL, instead received "https://"` | The `APP_URL` variable was set before the application had its domain, so it holds only `https://`. | Set `APP_URL` to `https://` and the domain, such as `https://storefront-x7k2m.sevalla.app`, then deploy. See [Deploy an AdonisJS application](https://docs.sevalla.com/guides/javascript/adonisjs.md#troubleshoot). |
| `Cannot find package '@iconify-json/lucide'` | The icon set is still in `devDependencies`, which a production install leaves out. | Run `npm install --save-prod @iconify-json/lucide`, and commit `package.json` and `package-lock.json`. See [Deploy an AdonisJS application](https://docs.sevalla.com/guides/javascript/adonisjs.md#troubleshoot). |
| `Missing manifest file. Make sure to first create a build` | With the Dockerfile, `manifestFile` in `config/vite.ts` is a relative path, and the image holds only `build/`. | Resolve the path with `app.makePath()`. See [Deploy an AdonisJS application](https://docs.sevalla.com/guides/javascript/adonisjs.md#troubleshoot). |
| `Header "host" with value "<host>" is not allowed.` | The domain isn't in `NG_ALLOWED_HOSTS`, so Angular's server answers `400`. | Add the domain to `NG_ALLOWED_HOSTS`, then deploy: variables apply at the next deployment. See [Deploy an Angular application](https://docs.sevalla.com/guides/javascript/angular.md#verify-the-deployment). |
| `Received "x-forwarded-proto" header but "trustProxyHeaders" was not set up to allow it.` | The headers that Sevalla's proxy adds aren't in `NG_TRUST_PROXY_HEADERS`, so Angular's server ignores them and logs this for each one. | Set `NG_TRUST_PROXY_HEADERS` to `x-forwarded-for,x-forwarded-proto`, then deploy. See [Deploy an Angular application](https://docs.sevalla.com/guides/javascript/angular.md#allow-the-domains-and-the-proxy-headers). |
| `Error: Invariant: PPR cannot be enabled in export mode` | The static export still turns on `cacheComponents`, which needs a server. | Remove `cacheComponents` and `partialPrefetching` from the Next.js config. See [Deploy a Next.js application](https://docs.sevalla.com/guides/javascript/nextjs.md#deploy-a-static-export). |
| `NotCapable` | The Deno server needs a permission that Ingot's start command doesn't grant, such as `--allow-write`. | Add a `start` task to `deno.json` that runs `main.ts` with the permissions it needs. See [Deploy a Deno application](https://docs.sevalla.com/guides/javascript/deno.md#verify-the-deployment). |
| `Could not find Chrome` | The image has no Chrome. | Check that `puppeteer` is in `dependencies`, not `devDependencies`, then deploy. See [Run Puppeteer](https://docs.sevalla.com/guides/javascript/puppeteer.md#verify-the-deployment). |
| ``The table `public.Product` does not exist in the current database.`` | No migration ran, because the deployment has no `Migrate` job. | Create the `Migrate` job, then deploy. See [Use PostgreSQL from Node.js with Prisma](https://docs.sevalla.com/guides/javascript/prisma.md#deploy-and-verify). |
| `Can't reach database server at 127.0.0.1:5432` | The running application has no `DATABASE_URL` variable. | Rename `DB_URL` to `DATABASE_URL` on the **Environment variables** tab, or add the internal connection with its variables, then deploy. See [Use PostgreSQL from Node.js with Prisma](https://docs.sevalla.com/guides/javascript/prisma.md#deploy-and-verify). |
| `DATABASE_URL is not set` | The internal connection was added without its variables, so EmDash has no `DB_URL`. | Disconnect the database, add the internal connection again with **Add environment variables to the application** turned on, then deploy. See [Deploy an EmDash site](https://docs.sevalla.com/guides/javascript/emdash.md#verify-the-deployment). |
| `Port should be >= 0 and < 65536. Received type number (NaN).` | The `REDIS_*` variables aren't set in the running application. | Add the internal connection with **Add environment variables to the application** turned on, then deploy. See [Run background jobs with BullMQ](https://docs.sevalla.com/guides/javascript/bullmq.md#deploy-and-verify). |
| `Protocol - valkey: - is not a valid Redis protocol. Expected redis: or rediss:` | The `redis` client got the `REDIS_URL` of a Valkey database, which starts with `valkey://`. | Pass `REDIS_HOST`, `REDIS_PORT` and `REDIS_PASSWORD` to the client instead of the URL. See [Run a Socket.IO server](https://docs.sevalla.com/guides/javascript/socketio.md#troubleshoot). |
| `{"code":1,"message":"Session ID unknown"}` | The web process runs more than one instance, and the Socket.IO client starts with long-polling. A poll that reaches another instance gets `400`, because each instance knows only the sessions it created. | Connect over WebSocket only, with `io({ transports: ["websocket"] })`. See [Run a Socket.IO server](https://docs.sevalla.com/guides/javascript/socketio.md#troubleshoot). |
| `No value provided for input HTTP label: Bucket.` | The `S3_*` variables aren't set in the running application. | Add them on the **Environment variables** tab with **Available during runtime** selected, then deploy. See [Use object storage from Node.js](https://docs.sevalla.com/guides/javascript/object-storage.md#deploy-and-verify). |

## Python

| Error | Cause | Fix |
| - | - | - |
| `Bad Request (400)` | The domain isn't in `ALLOWED_HOSTS`. With `DEBUG` off, Django doesn't log the rejected host. | Add the domain to `ALLOWED_HOSTS`, then deploy. See [Deploy a Django application](https://docs.sevalla.com/guides/python/django/deploy.md#troubleshoot-the-deployment). |
| `Set the SECRET_KEY environment variable` | The `SECRET_KEY` variable isn't set, or isn't **Available during runtime**. | Add or update the variable, then deploy. See [Deploy a Django application](https://docs.sevalla.com/guides/python/django/deploy.md#troubleshoot-the-deployment). |
| `CSRF verification failed. Request aborted.` | With your own Dockerfile, Gunicorn doesn't trust the `X-Forwarded-Proto` header from Sevalla's proxy, so Django sees the HTTPS form post as HTTP and rejects its origin. | Set `FORWARDED_ALLOW_IPS="*"` in the Dockerfile. See [Deploy a Django application](https://docs.sevalla.com/guides/python/django/deploy.md#troubleshoot-the-deployment). |
| `ImproperlyConfigured: Set the S3_BUCKET environment variable` | The build runs `collectstatic`, which loads the settings, and the bucket variables aren't available to it. | With Ingot, select **Available during buildtime** on the variables. With your own Dockerfile, give `collectstatic` placeholder values for them, next to the placeholder `SECRET_KEY`. See [Store Django media in object storage](https://docs.sevalla.com/guides/python/django/object-storage.md#add-the-bucket-details-to-the-application). |
| `django.db.utils.ProgrammingError: relation "customers_client" does not exist` | The migration of the `customers` app isn't committed, so the `Migrate` job can't create its tables. | Run `python manage.py makemigrations customers shop`, commit the migration, and push. See [Build a multitenant Django application](https://docs.sevalla.com/guides/python/django/multitenancy.md#add-the-views-and-urls). |
| `PermissionError: [Errno 13] Permission denied: 'celerybeat-schedule'` | With your own Dockerfile, `/app` is read-only, and Celery beat writes its schedule file to the working directory. | Start beat with `--schedule /tmp/celerybeat-schedule`. See [Run Django background tasks](https://docs.sevalla.com/guides/python/django/background-tasks.md#run-tasks-on-a-schedule). |
| `Cannot connect to redis://localhost:6379/0` | The worker has no `REDIS_URL`, so Celery falls back to the local default from the settings. | Check the internal connection on the **Networking** tab, then deploy. See [Run Django background tasks](https://docs.sevalla.com/guides/python/django/background-tasks.md#verify). |
| `KeyError: 'DB_URL'` | The application has no internal connection to the database, so the `Migrate` job has no `DB_URL`. | Add the connection with **Add environment variables to the application** turned on, then deploy again. See [Deploy an agent with the OpenAI Agents SDK](https://docs.sevalla.com/guides/ai/openai-agents-sdk.md#troubleshoot). |
| `{"detail":"Not authenticated"}` | The request has no `Authorization` header, so FastAPI answers `401`. | Send `Authorization: Bearer` and the value of the application's token variable, such as `API_TOKEN`. See [Deploy an agent with the OpenAI Agents SDK](https://docs.sevalla.com/guides/ai/openai-agents-sdk.md#troubleshoot). |
| `{"detail":"Invalid token"}` | The token in the request doesn't match the application's token variable, such as `API_TOKEN`. | Check the variable on the **Environment variables** tab. A change applies at the next deployment. See [Deploy an agent with the OpenAI Agents SDK](https://docs.sevalla.com/guides/ai/openai-agents-sdk.md#troubleshoot). |

## PHP

| Error | Cause | Fix |
| - | - | - |
| `Database file at path [/app/database/database.sqlite] does not exist` | The `DB_CONNECTION` variable isn't set, so Laravel uses its default, SQLite. | Add `DB_CONNECTION` with the value `pgsql`, then deploy. See [Deploy a Laravel application](https://docs.sevalla.com/guides/php/laravel/deploy.md#troubleshoot-the-deployment). |
| `production.ERROR: No application encryption key has been specified.` | The `APP_KEY` variable isn't set, so every page returns `500`. | Add `APP_KEY` with the output of `php artisan key:generate --show`, then deploy. See [Deploy a Laravel application](https://docs.sevalla.com/guides/php/laravel/deploy.md#troubleshoot-the-deployment). |
| `Invalid URI.`, after `In Request.php line 395:` | The `APP_URL` variable has no domain, for example `https://`, so the `Migrate` job fails. | Set `APP_URL` to `https://` and the application's domain, then deploy. See [Deploy a Laravel application](https://docs.sevalla.com/guides/php/laravel/deploy.md#troubleshoot-the-deployment). |
| `production.ERROR: read error on connection to tcp://<host>:6379` | The application has no internal connection to the Redis database. | Add the internal connection on the application's **Networking** tab. It applies at once, without a deployment. See [Cache Laravel with Redis](https://docs.sevalla.com/guides/php/laravel/caching.md#troubleshoot). |
| `App\Jobs\<job> has been attempted too many times.` | The worker's start command has no `exec`, so the shell ignores the stop signal, and Sevalla stops the instance 30 s after the shutdown began, often in the middle of a job. That job fails once `retry_after` (90 s) has passed. | Start the worker with `exec`. See [Run Laravel queues and scheduled tasks](https://docs.sevalla.com/guides/php/laravel/queues.md#stop-the-worker-cleanly-on-deployments). |
| `GetObjectAcl not implemented` | The bucket doesn't keep per-file visibility: public access applies to the whole bucket, so `Storage::getVisibility()` fails. | Keep private files in a second, private bucket, with a second disk in `config/filesystems.php`. See [Store Laravel files in object storage](https://docs.sevalla.com/guides/php/laravel/object-storage.md#link-to-the-files). |
| `connection to server at "127.0.0.1", port 5432 failed: Connection refused` | The `DATABASE_URL` variable isn't set, so Doctrine uses the local default from `.env`. | Check that `DATABASE_URL` exists on the **Environment variables** tab. If the internal connection added `DB_URL` instead, add `DATABASE_URL` with the same value, then deploy. See [Deploy a Symfony application](https://docs.sevalla.com/guides/php/symfony.md#troubleshoot-the-deployment). |
| `Error establishing a database connection` | The `DB_*` variables are missing or wrong, or the database isn't **Ready**. | Check the internal connection on the **Networking** tab and the `DB_*` variables on the **Environment variables** tab, then deploy. See [Deploy a WordPress site](https://docs.sevalla.com/guides/php/wordpress.md#troubleshoot-the-deployment). |

## Ruby

| Error | Cause | Fix |
| - | - | - |
| `Blocked hosts: <host>` | The domain isn't in `ALLOWED_HOSTS`, so every page returns `403`. | Add the domain to `ALLOWED_HOSTS`, then deploy. See [Deploy a Rails application](https://docs.sevalla.com/guides/ruby/rails/deploy.md#troubleshoot). |
| ``ArgumentError: Missing `secret_key_base` for 'production' environment`` | The `SECRET_KEY_BASE` variable isn't set, or isn't **Available during runtime**. | Add the variable, then deploy. See [Deploy a Rails application](https://docs.sevalla.com/guides/ruby/rails/deploy.md#troubleshoot). |
| `PG::DuplicateTable: ERROR:  relation "products" already exists` | The file `config/database.yml` still has the `cache`, `queue` and `cable` databases, all pointing at the one database. | Replace the `production` section of `config/database.yml` with one database, and move the Solid Cache, Solid Queue and Solid Cable tables into a migration. See [Deploy a Rails application](https://docs.sevalla.com/guides/ruby/rails/deploy.md#use-one-database). |
| `SolidQueue::Processes::ProcessPrunedError` | The worker's start command is `bin/jobs` without `exec`, so the old instance was killed with the job running. | Set the worker's start command to `exec bin/jobs`, then deploy. See [Run Rails background jobs](https://docs.sevalla.com/guides/ruby/rails/background-jobs.md#troubleshoot). |
| `ArgumentError: Unknown URL scheme` | The cache got a `valkey://` URL, and the `redis` gem accepts only `redis://`, `rediss://` and `unix://` URLs. | Keep the `.sub(/\Avalkey:/, "redis:")` in `config.cache_store`. See [Cache a Rails application](https://docs.sevalla.com/guides/ruby/rails/caching.md#troubleshoot). |
| `Aws::S3::Errors::InvalidRequest (You can only specify one non-default checksum at a time.)` | The file `config/storage.yml` lacks the two checksum options. | Add them and deploy. Variants that failed keep a record without a file: delete the records with `bin/rails runner "ActiveStorage::VariantRecord.delete_all"` in the web terminal. See [Store Rails uploads in object storage](https://docs.sevalla.com/guides/ruby/rails/object-storage.md#troubleshoot). |

## Go

| Error | Cause | Fix |
| - | - | - |
| `go: go.mod requires go >= 1.28.0 (running go 1.27.3; GOTOOLCHAIN=local)` | In a Dockerfile build, the `go` line in `go.mod` is newer than the Go in the `golang:1.27` image, which doesn't download a newer one. | Lower the `go` line, for example with `go mod edit -go=1.27.0`, or build on a newer `golang` image when one exists. See [Deploy a Gin application](https://docs.sevalla.com/guides/go/gin.md#troubleshoot). |

## Rust

| Error | Cause | Fix |
| - | - | - |
| `"/Cargo.lock": not found` | The Dockerfile copies `Cargo.lock`, which isn't in the repository. | Commit `Cargo.lock`. See [Deploy an Axum application](https://docs.sevalla.com/guides/rust/axum.md#troubleshoot). |

## Java and Kotlin

| Error | Cause | Fix |
| - | - | - |
| `Terminating due to java.lang.OutOfMemoryError: Java heap space` | The JVM heap is full, so instances restart. | Choose a larger size. See [Deploy a Spring Boot application](https://docs.sevalla.com/guides/java/spring-boot.md#troubleshoot) and [Size the JVM memory](https://docs.sevalla.com/guides/java/overview.md#size-the-jvm-memory). |
| `"/pom.xml": not found` | A Dockerfile build fails at `COPY pom.xml ./`, because the repository still has the `.dockerignore` that code.quarkus.io generates, which leaves out everything but `target/`. | Replace it with the `.dockerignore` from the Quarkus guide's Dockerfile section. See [Deploy a Quarkus application](https://docs.sevalla.com/guides/java/quarkus.md#troubleshoot). |

## .NET

| Error | Cause | Fix |
| - | - | - |
| `Cannot load library libgssapi_krb5.so.2` | The connection string doesn't turn off `GssEncryptionMode`, so Npgsql tries to load Kerberos, which Microsoft's runtime images don't include. | Set `GssEncryptionMode = GssEncryptionMode.Disable`. See [Deploy an ASP.NET Core application](https://docs.sevalla.com/guides/dotnet/aspnet-core.md#troubleshoot). |
| `error NU1004: The package references have changed for net10.0. Lock file's package references: Microsoft.AspNetCore.App.Internal.Assets` | In a Dockerfile build, `dotnet restore` runs before the `.razor` files are copied, so the SDK leaves out the package of Blazor's scripts that the lock file lists. | Add `-p:RequiresAspNetWebAssets=true` to `dotnet restore`. See [Deploy a Blazor application](https://docs.sevalla.com/guides/dotnet/blazor.md#troubleshoot). |

## Elixir

| Error | Cause | Fix |
| - | - | - |
| `Could not check origin for Phoenix.Socket transport.` | The page's domain isn't `PHX_HOST` or in `check_origin`, so LiveView pages load but don't react. | Set `PHX_HOST` to the domain, or list every domain in `check_origin`, then deploy. See [Deploy a Phoenix application](https://docs.sevalla.com/guides/elixir/phoenix.md#troubleshoot). |
| `environment variable DATABASE_URL is missing.` or `environment variable SECRET_KEY_BASE is missing.` | The variable isn't set, or isn't **Available during runtime**. | Add or update the variable, then deploy. See [Deploy a Phoenix application](https://docs.sevalla.com/guides/elixir/phoenix.md#troubleshoot). |

## AI applications

| Error | Cause | Fix |
| - | - | - |
| `Error code: 401 - Incorrect API key provided` | The key in `OPENAI_API_KEY` is wrong or revoked. | Create a key in the OpenAI dashboard, update the variable, and deploy. See [Deploy an agent with the OpenAI Agents SDK](https://docs.sevalla.com/guides/ai/openai-agents-sdk.md#troubleshoot). |
| `insufficient_quota` | The OpenAI account has no credit left. | Add credit on the OpenAI account, then deploy again. See [Build RAG with pgvector](https://docs.sevalla.com/guides/ai/rag-pgvector.md#troubleshoot). |
| `OpenAIError: Missing credentials` | The OpenAI SDK has no key, because `OPENROUTER_API_KEY` isn't set. The message names `OPENAI_API_KEY`. | Add `OPENROUTER_API_KEY` with **Available during runtime** selected, then deploy. See [Use OpenRouter on Sevalla](https://docs.sevalla.com/guides/ai/openrouter.md#troubleshoot). |
| `401 User not found.` | The OpenRouter key is wrong or deleted, so requests get `502`. | Copy the key again, or create one, then update `OPENROUTER_API_KEY` and deploy. See [Use OpenRouter on Sevalla](https://docs.sevalla.com/guides/ai/openrouter.md#troubleshoot). |
| `<model> is not a valid model ID` | A model ID in `MODEL` or `FALLBACKS` doesn't exist on OpenRouter. One unknown ID fails the whole request with `400`, even as a fallback. | Copy the ID from [openrouter.ai/models](https://openrouter.ai/models). OpenRouter's IDs can differ from the provider's own. See [Use OpenRouter on Sevalla](https://docs.sevalla.com/guides/ai/openrouter.md#model-ids). |
| `402 This request requires more credits, or fewer max_tokens.` | The account's balance, or the key's credit limit, doesn't cover the request's largest possible cost. | Add credits, raise the key's limit, or lower `max_tokens`. See [Use OpenRouter on Sevalla](https://docs.sevalla.com/guides/ai/openrouter.md#troubleshoot). |
| `429 Provider returned error` | A free model is rate limited at its provider, or the account reached its free-model limit. | Retry later, add a paid model to `FALLBACKS`, or use the paid model. See [Use OpenRouter on Sevalla](https://docs.sevalla.com/guides/ai/openrouter.md#troubleshoot). |
| `No endpoints found for <model>. Every candidate endpoint was removed during routing` | The request's `provider` settings leave no provider that hosts the model, for example `"order": ["deepinfra"]` with `"allow_fallbacks": false`. OpenRouter answers `404`. | Change the `provider` settings so that at least one provider that hosts the model remains. See [Use OpenRouter on Sevalla](https://docs.sevalla.com/guides/ai/openrouter.md#provider-preferences). |
| An empty answer, with `finish_reason` `length` | The model spent `max_tokens` on reasoning. | Lower `reasoning.effort` or raise `max_tokens`. See [Use OpenRouter on Sevalla](https://docs.sevalla.com/guides/ai/openrouter.md#reasoning-and-empty-answers). |
| `Not logged in · Please run /login` | The agent has no `ANTHROPIC_API_KEY` at runtime, so a task fails with this result. | Add the variable on the **Environment variables** tab with **Available during runtime** selected, then deploy. See [Deploy an agent with the Claude Agent SDK](https://docs.sevalla.com/guides/ai/claude-agent-sdk.md#troubleshoot). |
| `Native CLI binary for linux-x64 not found. Reinstall @anthropic-ai/claude-agent-sdk without --omit=optional, or set options.pathToClaudeCodeExecutable.` | The image was built without optional dependencies. | Remove `--omit=optional` or `--no-optional` from the install command. See [Deploy an agent with the Claude Agent SDK](https://docs.sevalla.com/guides/ai/claude-agent-sdk.md#troubleshoot). |
| `error_max_turns` | The agent used its 10 turns (`maxTurns`) without finishing. | Raise `maxTurns` in `agent.ts`, or give the agent a narrower task. See [Deploy an agent with the Claude Agent SDK](https://docs.sevalla.com/guides/ai/claude-agent-sdk.md#troubleshoot). |
| `Permission to use Read has been denied because Claude Code is running in don't ask mode.` | The agent tried a call that isn't pre-approved, such as reading outside its folder, and `permissionMode: "dontAsk"` denied it. `Grep` and `Glob` get the same message. | Nothing to fix: this is the agent's guard working. Never give a public agent `Bash`, `Write` or `Edit`. See [Deploy an agent with the Claude Agent SDK](https://docs.sevalla.com/guides/ai/claude-agent-sdk.md#secure-the-agent). |
| `` `tool_use` ids were found without `tool_result` blocks immediately after `` | A message reached a LangGraph thread whose last run stopped between Claude's tool call and the tool's result. | Finish the run first, as `thread_state` does: `await graph.ainvoke(None, thread(thread_id))`. See [Deploy a LangGraph agent](https://docs.sevalla.com/guides/ai/langgraph.md#troubleshoot). |
| `{"detail":"The thread is waiting for a decision"}` | The thread is paused at a refund, so a new message gets `409`. | Send the decision to `/threads/<thread_id>/resume` first. See [Deploy a LangGraph agent](https://docs.sevalla.com/guides/ai/langgraph.md#troubleshoot). |
| `{"detail":"The thread has no decision to make"}` | The thread isn't paused, so a request to its `/resume` route gets `409`. | Send a message to `/threads/<thread_id>/messages` instead. See [Deploy a LangGraph agent](https://docs.sevalla.com/guides/ai/langgraph.md#troubleshoot). |
| `Anthropic API key is missing` | The `ANTHROPIC_API_KEY` variable isn't set or isn't **Available during runtime**, so the chat answers `An error occurred.` | Add the variable, then deploy. See [Deploy an AI chatbot with the AI SDK](https://docs.sevalla.com/guides/ai/ai-sdk-chatbot.md#troubleshoot). |
| `Sign in required` | The `CHAT_USERNAME` or `CHAT_PASSWORD` variable isn't set, isn't **Available during runtime**, or doesn't match what you type, so requests get `401`. | Check both variables on the **Environment variables** tab, then deploy. See [Deploy an AI chatbot with the AI SDK](https://docs.sevalla.com/guides/ai/ai-sdk-chatbot.md#troubleshoot). |
| `PostgresStore: invalid config. Provide either {pool}, {connectionString}, {host,port,database,user,password}, or a pg ClientConfig` | The `DB_URL` variable isn't set or isn't **Available during runtime**. | Connect the database with **Add environment variables to the application** turned on, then deploy. See [Deploy a Mastra agent](https://docs.sevalla.com/guides/ai/mastra.md#troubleshoot). |
| `{"error":"Invalid or expired token"}` | The request has no token or the wrong one, or `MASTRA_API_TOKEN` isn't set on the application. Every API request gets `401`. | Send `Authorization: Bearer` and the value of `MASTRA_API_TOKEN`. Check the variable on the **Environment variables** tab, then deploy. See [Deploy a Mastra agent](https://docs.sevalla.com/guides/ai/mastra.md#troubleshoot). |
| `Set ANTHROPIC_API_KEY or CLAUDE_CODE_OAUTH_TOKEN` | Neither key is set for runtime. | Add one of them, then deploy. See [Run Claude Code on Sevalla](https://docs.sevalla.com/guides/ai/claude-code.md#troubleshoot). |
| `Error: Insufficient permissions to install update` | The command `claude update` ran in the instance, where the global npm folder belongs to root. The version comes only from the image. | Change `CLAUDE_CODE_VERSION` in the `Dockerfile`, commit and push, then click **Deploy now** when no task is running. See [Run Claude Code on Sevalla](https://docs.sevalla.com/guides/ai/claude-code.md#update-claude-code). |
| `#<number>: no verdict: Invalid API key · Fix external API key` | Claude Code couldn't finish the review, here because `ANTHROPIC_API_KEY` is wrong. Other causes print their own message after `no verdict:`. | Fix the cause the message names, then restart the reviewer. See [Run a swarm of agents](https://docs.sevalla.com/guides/ai/agent-swarm.md#troubleshoot). |
| `{"error":"invalid_token"}` | The MCP client sends no `Authorization` header, or a different token, so requests get `401`. | Send `Authorization: Bearer <token>` with the value of `MCP_TOKEN`. After you change the token, deploy and update every client. See [Deploy an MCP server with TypeScript](https://docs.sevalla.com/guides/ai/mcp-typescript.md#troubleshoot). |
| `{"jsonrpc":"2.0","error":{"code":-32001,"message":"Session not found"},"id":null}` | The MCP server keeps sessions in memory and runs more than one instance. Sevalla has no session affinity, so a request that reaches another instance gets `404`. | Use a handler that keeps no session, such as `createMcpHandler`, and keep anything a tool must remember in the database. See [Deploy an MCP server with TypeScript](https://docs.sevalla.com/guides/ai/mcp-typescript.md#run-more-than-one-instance). |
| `421 Misdirected Request` and `Invalid Host header` | The MCP Python SDK accepts only `localhost`, because `streamable_http_app()` has no `transport_security`. | Pass `transport_security=TransportSecuritySettings(enable_dns_rebinding_protection=False)`. See [Deploy an MCP server with Python](https://docs.sevalla.com/guides/ai/mcp-python.md#troubleshoot). |
| `cannot execute DELETE in a read-only transaction` | An MCP tool writes to the database through the read-only pool. `INSERT` and `UPDATE` get the same message. | Give tools that write a second `pg.Pool` without `options`, and mark them with `readOnlyHint: false` so that clients ask before they run. See [Deploy an MCP server with TypeScript](https://docs.sevalla.com/guides/ai/mcp-typescript.md#troubleshoot). |
| `relation "orders" does not exist` | The tables from `schema.sql` aren't in the database the MCP server connects to. | Run `schema.sql` in the database's **SQL studio**, or with `psql`. See [Deploy an MCP server with TypeScript](https://docs.sevalla.com/guides/ai/mcp-typescript.md#troubleshoot). |
| `Please choose a secure password by combining letters, numbers, and special characters.` | The Langfuse password has only letters and digits. | Add a special character. See [Deploy Langfuse](https://docs.sevalla.com/guides/ai/langfuse.md#troubleshoot). |
| `Sign up is disabled.` | The Langfuse web application has `AUTH_DISABLE_SIGNUP=true`, which also blocks invited people who don't have an account yet. | Create your team's accounts before you turn sign-up off. See [Deploy Langfuse](https://docs.sevalla.com/guides/ai/langfuse.md#create-an-account-and-api-keys). |
| `ClickhouseWriter: Max attempts reached, dropped 1 events_full record(s)` | A deployment of ClickHouse stopped it, and the Langfuse worker dropped the traces it couldn't write after 3 attempts. | Before you deploy ClickHouse, set the worker's **Instance count** to `0` and deploy the worker, so that new traces wait in the Redis queue. See [Deploy Langfuse](https://docs.sevalla.com/guides/ai/langfuse.md#update-clickhouse). |
| `Queue full, dropping Span.` | A script creates spans faster than the Langfuse Python SDK sends them. | Call `langfuse.flush()` every few hundred traces in batch scripts. See [Deploy Langfuse](https://docs.sevalla.com/guides/ai/langfuse.md#troubleshoot). |
| `Unexpected Response: 401 (Unauthorized)` with `Invalid API key or JWT` | The request to Qdrant has no API key, or the wrong one. | Check `QDRANT_API_KEY` against the `qdrant` application's `QDRANT__SERVICE__API_KEY`. See [Deploy Qdrant](https://docs.sevalla.com/guides/ai/qdrant.md#troubleshoot). |
| `Snapshot is not compatible with existing collection` | The collection's vector settings differ from the snapshot's. | Delete the collection, and let `restore` create it with the right settings. See [Deploy Qdrant](https://docs.sevalla.com/guides/ai/qdrant.md#troubleshoot). |
| `UNAVAILABLE` | A gRPC request reached Qdrant right after a deployment, while Qdrant was still starting. | Add the readiness probe on `/readyz`. See [Deploy Qdrant](https://docs.sevalla.com/guides/ai/qdrant.md#troubleshoot). |
| `Deployment key 'signing.hmac' cannot be read with this instance encryption key` | The `N8N_ENCRYPTION_KEY` variable changed since n8n first started, so n8n restarts in a loop. | Set the variable back to the original key, then deploy. See [Deploy n8n](https://docs.sevalla.com/guides/ai/n8n.md#keep-the-encryption-key). |
| `ValidationError: The 'X-Forwarded-For' header is set but the Express 'trust proxy' setting is false (default).` | The `N8N_PROXY_HOPS` variable isn't set. | Set it to `2` in OCI locations or `3` in Google Cloud locations, then deploy. See [Deploy n8n](https://docs.sevalla.com/guides/ai/n8n.md#troubleshoot). |
| `The requested webhook "<method> <path>" is not registered.` | The workflow isn't published, or the path or method differs, so the call gets `404`. | Publish the workflow, and use the **Production URL** that the **Webhook** node shows. See [Deploy n8n](https://docs.sevalla.com/guides/ai/n8n.md#run-a-workflow-from-a-webhook). |
| `{"code":0,"message":"No item to return was found"}` | The workflow runs in n8n's legacy execution order, so the agent gets an empty result from every tool. Workflows created through n8n's API without the setting run this way. | Set `"executionOrder": "v1"` in the workflow's settings. See [Deploy n8n](https://docs.sevalla.com/guides/ai/n8n.md#build-an-ai-agent-workflow). |
| `Shutdown timed out after 20 seconds` | A deployment replaced the n8n worker during an execution. The execution stays **Running** and never finishes. | Set `N8N_WORKER_SUSPEND_EXECUTIONS_ON_SHUTDOWN` to `true`, so that the worker suspends the execution and the new worker continues it. See [Deploy n8n](https://docs.sevalla.com/guides/ai/n8n.md#running-executions-during-a-deployment). |
| `Invalid database_url provided: 'postgres://***:***@...'` | The `LANGFLOW_DATABASE_URL` variable starts with `postgres://`, which SQLAlchemy doesn't know. | Change the start to `postgresql://`, then deploy. See [Deploy Langflow](https://docs.sevalla.com/guides/ai/langflow.md#connect-the-database). |
| `Error building Component Language Model: A model selection is required` | The Langflow flow has no saved model. | Choose the model in the **Language Model** component again. See [Deploy Langflow](https://docs.sevalla.com/guides/ai/langflow.md#troubleshoot). |
| `API key decryption failed after retry. This may indicate a corrupted key or SECRET_KEY mismatch.` | The `LANGFLOW_SECRET_KEY` variable changed, so Langflow can't read the global variables created in its settings. | Put the original key back, then deploy. See [Deploy Langflow](https://docs.sevalla.com/guides/ai/langflow.md#keep-the-secret-key). |
| `Authentication Error, No api key passed in.` | The request to LiteLLM has no `Authorization: Bearer` header. | Send a virtual key. See [Deploy the LiteLLM proxy](https://docs.sevalla.com/guides/ai/litellm.md#troubleshoot). |
| `key_model_access_denied` | The LiteLLM key was created with a `models` list that doesn't include the model, so the request gets `403`. | Create a key without `models`, or with the model in the list. See [Deploy the LiteLLM proxy](https://docs.sevalla.com/guides/ai/litellm.md#troubleshoot). |
| `401, message='Unauthorized', url='https://api.openai.com/v1/embeddings'` | The `RAG_EMBEDDING_ENGINE` variable is `openai` without `RAG_OPENAI_API_BASE_URL`, so Open WebUI sends embeddings to OpenAI and uploads fail. | Use the `ollama` engine, or set the engine in **Admin Panel** > **Settings** > **Documents**. See [Deploy Open WebUI](https://docs.sevalla.com/guides/ai/open-webui.md#troubleshoot). |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.