Errors
A failed deployment shows an error code and a message on its page. The message says what went wrong in your terms; this page explains each code and what to do next.
Codes are stable; messages may be reworded. For errors that come from your own code, the deployment’s build log or the app’s runtime logs hold the detail; see Logs.
Your repository#
| Code | Meaning | What to do |
|---|---|---|
repo_unreadable | We could see no files in the repository at all. That almost always means we do not have access, rather than that it is empty. | If it is private, connect the git account that owns it, then deploy again. |
repo_not_granted | Your connected GitHub account cannot see this repository. | In your GitHub settings, under the installed app, give it access to this repository, then deploy again. |
framework_undetected | Nothing in the root directory told us how to build it. | Set the root directory if the app is in a subfolder, or add a Dockerfile. See Build configuration. |
no_entrypoint | A Python project with none of manage.py, app.py, main.py, wsgi.py, asgi.py, application.py, server.py or run.py in the root directory, so there is nothing to start. | Set the root directory to the folder that contains the app. A library cannot be deployed. |
nothing_to_build | A project with no build script and no index.html to serve. | In a monorepo, set the root directory to the app. For a plain static site, commit an index.html. |
The build#
| Code | Meaning | What to do |
|---|---|---|
build_failed | The build did not produce an app. The message names the step: checking out your code, a commit that no longer exists (often after a force-push), a missing root directory or Dockerfile, or your own build command failing. | Read the build log. When your build command failed, its own output is there. |
build_timeout | The build ran for more than 20 minutes and was stopped. | Deploy again. If it keeps happening, look for a step that hangs or downloads far more than it needs. |
Common causes of a failed build command
| In the build log | Cause |
|---|---|
| Missing environment variables, or a key not provided | Code that reads a variable at import time and throws if it is absent. Add the variable under Environment and deploy again. |
| A lockfile error from npm ci, pnpm or yarn | Your lockfile does not match package.json. Update and commit the lockfile. |
| Out of memory, or the process was killed | The build needs more than the 4 GB a build machine has. Reduce what the build does at once. |
Starting the app#
| Code | Meaning | What to do |
|---|---|---|
rollout_failed | It built, but the app never started serving within four minutes: it exited, crashed, or did not listen on its port. | Open Runtime logs for what it printed. Check that it listens on PORT on 0.0.0.0. Roll back to restore the previous version meanwhile. |
hostname_taken | The app's address is already used by another app. | Rename the app under Settings, then deploy again. |
On our side#
| Code | Meaning | What to do |
|---|---|---|
interrupted | The platform restarted while your deployment was building. Nothing was changed. | Deploy again. It builds the same commit. |
publish_failed | The build succeeded, but storing its image failed. | Deploy again. If it keeps happening, contact support. |
internal_error | Something failed on our side. The message ends with a reference. | Deploy again. If it keeps happening, contact support and quote the reference. |
Deploy hook responses#
Calls to a deploy hook return their own HTTP errors, such as 404 for an unknown hook and 429 when it is called too often. They are listed on the Deploy hooks page.
Something missing or wrong on this page? Tell us, and quote the page title.