Run db:migrate automatically before every Railway deploy

The 2026-07-06 prod outage was a missed manual migration: the 0002
job_events migration never ran against prod, so the worker crash-looped
on every job. Make the deploy pipeline own it:

- railway.json sets `npm run db:migrate` as the pre-deploy command.
  Railway runs it with the service's env before starting the new
  deployment; a failed migration fails the deploy and the old version
  keeps serving.
- runMigrations() now serializes on a Postgres advisory lock so api and
  worker pre-deploys firing off the same push can't race Drizzle's
  journal writes.
- DEPLOY.md: document the automatic path; keep the manual command for
  first-time setup.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Samraaj Bath
2026-07-06 23:20:59 -07:00
co-authored by Claude Fable 5
parent 5285ddc2b2
commit 1ad0f28f48
3 changed files with 33 additions and 7 deletions
+6
View File
@@ -0,0 +1,6 @@
{
"$schema": "https://railway.com/railway.schema.json",
"deploy": {
"preDeployCommand": "npm run db:migrate"
}
}