Railway stops the container ~3 seconds later and restarts it in a loop
samucodes101
FREEOP

a month ago

Hey team.I'm having a frustrating issue with a Node.js/Express backend that runs perfectly locally but keeps crash-looping on Railway.

The problem:

My app starts (Server running on port 8080), but Railway stops the container ~3 seconds later and restarts it in a loop. No error is printed after startup — the process just dies silently.

What I've ruled out:

  • App runs fine locally with NODE_ENV=production node src/app.js — no crashes
  • DATABASE_URL` is set and Prisma connects successfully (migrations run fine in logs)
  • No hardcoded PORT — I let Railway inject it
  • trust proxy 1` is set (was getting ERR_ERL_UNEXPECTED_X_FORWARDED_FOR from express-rate-limit, now fixed)
  • No placeholder env vars
  • uncaughtExceptionandunhandledRejection` handlers are in place but nothing is logged before the stop

Relevant log pattern:

Starting Container
Prisma: No pending migrations to apply
Stopping Container        ← happens ~3s after start, no error
Starting Container
Server running on port 8080
Environment: production
(dies again)

Stack: Node 22, Express, Prisma 5.22, express-rate-limit, Railway Postgres (internal URL)

Is Railway sending a health check signal that my app isn't responding to in time? Could there be a startup timeout I'm hitting? Any way to see what signal is killing the container?

Thanks

Solved

7 Replies

a month ago

You have a pre-deploy command set, so that runs, the pre-deploy container stops, and then the runtime container starts.


samucodes101
FREEOP

a month ago

I'm sorry, Is that the issue?

What am I to do. I've been debugging for hours.


a month ago

That is not an issue. If you are experiencing a real issue, then you have gone down a rabbit hole here.

Please explain the issue, not what you think is causing the issue.


samucodes101
FREEOP

a month ago

My frontend at https://patrioticng.org is getting a CORS error when hitting https://patriotic-backend-production.up.railway.app/diaspora and https://patriotic-backend-production.up.railway.app/contact. The preflight OPTIONS request returns a 502 with no Access-Control-Allow-Origin header. CORS is configured correctly in railway. Why would a 502 be returned instead of my app handling the preflight?


a month ago

(no markdown available for this content)


samucodes101
FREEOP

a month ago

THANK YOU! IT WORKED.


a month ago

(no markdown available for this content)


Status changed to Solved brody about 1 month ago


Welcome!

Sign in to your Railway account to join the conversation.

Loading...