Synthetic Industry

Platform · updated 2026-10-11

Leaving Heroku: list everything the app depends on before choosing the new host

A Heroku app is its code plus a Procfile, a release command, config variables, add-ons, scheduled jobs and a database. List them before picking where to go.

The app is more than its repository

On Heroku an app is the code plus several things that are configured around it: the Procfile that names the web and worker processes, an optional release command, config variables, add-ons, scheduled jobs and a Postgres database. Most of these are not in the repository, so copying the code to a new host moves a fraction of the system.

  • Procfile and release command: what starts and what runs before each release.
  • Config variables and add-ons: settings and services the app reads at runtime.
  • Scheduled jobs and the database: work that happens without a web request.

Why a partial move fails quietly

Heroku's documentation says a release command runs in a one-off dyno whenever a new release is created, except for a release caused by an add-on's config vars, and that a failure stops the release, so a migration step the new host does not run may never be noticed until the first deploy. Heroku Scheduler jobs live in an add-on, not in your code, and the documentation says execution is expected but not guaranteed and that a job can occasionally run twice or be skipped. Moving them means choosing a replacement and checking it, not copying a setting.

  • A job that ran on Heroku and on the new host at once can duplicate emails or charges.
  • A job that ran on neither shows up as missing data days later.

The database is the one-way step

PGBackups takes logical backups and is designed for moderately loaded databases up to 20 GB; Heroku's documentation says a restore deletes all existing data in the target first. A database copy is therefore rehearsed into a new, empty target and reconciled table by table before any final copy. A move with no pause in writes needs a different technique and a separate plan.

  • Never restore over a live database.
  • Agree a write freeze for the final copy, and how new writes are reconciled if you must go back.

What to send first

Send the language and framework, the process names in the Procfile, the add-on names and the database size. Do not send config variable values, database URLs or a Heroku login; the fixed job never needs them. It is sold as one web app and one database up to 20 GB, with no worker, scheduled job or queue (an app that has those is quoted separately), and the price and acceptance checks are on its page; prices are untested proposals and payment follows your sign-off.

Sources and limits

  • Heroku Dev Center: Heroku PGBackups Checked 2026-10-11.
    • PGBackups takes logical backups, designed for moderately loaded databases up to 20 GB, and a restore deletes all data in the target database first.
  • Heroku Dev Center: release phase Checked 2026-10-11.
    • A release process type in the Procfile runs in a one-off dyno whenever a new release is created, unless the release is caused by changes to an add-on's config vars, and a failing release command stops the release from deploying.
  • Heroku Dev Center: Heroku Scheduler Checked 2026-10-11.
    • Scheduler execution is expected but not guaranteed, and jobs can in rare cases be skipped or run twice.