a month ago
Service barra-web in project pirats-bay-bar (region sfo) has had every deployment fail at Network → Healthcheck for ~24 hours now, across multiple attempts (railway up and railway redeploy). Build and Deploy phases complete successfully every time (Build ~56s, Deploy ~8s), then the healthcheck against /salud/ fails with "service unavailable" until the retry window is exhausted (tried both a 100s and a 5-minute window — same result).
I found two similar recent threads here (a Gunicorn one and the rave/Next.js one where a Railway engineer traced it to the Aug 28 no-redirect-follow change) and already ruled out both of their root causes for my case:
Not a binding issue: my start command is gunicorn barra.wsgi:application --bind 0.0.0.0:$PORT, and railway ssh'd in to confirm — curl http://127.0.0.1:$PORT/salud/ and curl http://0.0.0.0:$PORT/salud/ both return 200 directly.
Not a redirect: those same curl calls were run without -L, and still returned 200 (not 301/302) — so the no-redirect-follow policy change from Aug 28 doesn't apply here, /salud/ is a plain 200 with no redirect involved.
DB is healthy: connects in ~51ms, 11/100 connections used.
Not app-level: same image/container, run manually, serves /salud/ correctly within 3 seconds.
Not usage/billing: workspace well under any limit.
The currently-live deployment (unchanged code, same service) keeps serving traffic fine throughout — it's specifically new deployments that never pass the healthcheck. This looks like the same "network wiring never completes for a new container" class of issue as the threads above, just without a redirect or binding cause behind it in my case. Happy to share deployment IDs / run any diagnostic you'd like.
8 Replies
a month ago
This thread has been opened as a bounty so the community can help solve it.
Status changed to Open Railway • about 1 month ago
a month ago
Caso saiba o problema real, eu não posso ter acesso aos seus projetos mas pelo que você descreveu já sei qual é o problema, caso tenha interesse em resolver seu problema basta dizer sim e seguir os passo a passo que eu vou te informar através da play store
a month ago
One thing worth double-checking that isn't fully covered by your curl tests: is Service Settings → Networking → Target Port set to the exact same value as whatever $PORT resolves to at runtime for this deployment?
Curl-ing 127.0.0.1:$PORT and 0.0.0.0:$PORT from inside the container confirms the app is listening correctly — but it doesn't confirm Railway's healthcheck prober is aimed at that same port. The prober reads the dashboard's Target Port setting, which is a separate value from whatever $PORT actually resolves to inside your process. If those two have drifted apart (e.g. a settings change at some point, or a difference between how this service was originally configured vs. now), you'd see exactly this symptom: app boots and serves fine internally, but the healthcheck phase times out because it's probing the wrong port.
This is worth checking specifically because a near-identical "healthcheck hangs for the full timeout despite the app being verifiably healthy" case was just solved by exactly this — Target Port and PORT had silently diverged.
If they already match, this isn't it — but it's a 30-second check worth ruling out before assuming it's edge/proxy-side.
a month ago
One thing your curl tests can't catch is the Host header.
Railway's healthcheck prober sends its requests with the hostname healthcheck.railway.app (it's in the Healthchecks docs: https://docs.railway.com/reference/healthchecks). When you run curl against 127.0.0.1:$PORT from inside the container, Django sees Host: 127.0.0.1, which is most likely in your ALLOWED_HOSTS. The prober's host isn't, so Django raises DisallowedHost and answers 400. The healthcheck never passes even though the app is perfectly healthy, and the deploy log only shows the generic retry message.
It also explains why your live deployment keeps working: real users hit your public domain, which is allowed.
Confirm it in 10 seconds from railway ssh:
curl -i -H "Host: healthcheck.railway.app" http://127.0.0.1:$PORT/salud/
A 400 means that's it. You should also see Invalid HTTP_HOST header: 'healthcheck.railway.app' in your logs.
Fix: add "healthcheck.railway.app" to ALLOWED_HOSTS in your settings.
If it only started failing around the time you noticed, check whether ALLOWED_HOSTS is built from an environment variable that changed then.
a month ago
Primeira para você verificar o domínio você não pode mudar a porta 8080 esse domingo tiver público, outra coisa eu já falei que você resolve de forma grátis em casa sem procurar nem dinheiro autônoma todos os seus problemas e eu vou não vou ficar enchendo de mensagem vou mandar uma mensagem só tá eu já passei dessa época de ficar desenvolvendo bot, telegram agora se você quiser ficar batendo papo para os outros aí em vez de ficar resolvendo seu problema só pode ficar porque a partir de hoje é aqui para você eu não mando nenhuma mensagem a não ser que você realmente queira resolver o seu problema
adama-diallo-rse
One thing your curl tests can't catch is the Host header. Railway's healthcheck prober sends its requests with the hostname `healthcheck.railway.app` (it's in the Healthchecks docs: https://docs.railway.com/reference/healthchecks). When you run curl against 127.0.0.1:$PORT from inside the container, Django sees `Host: 127.0.0.1`, which is most likely in your `ALLOWED_HOSTS`. The prober's host isn't, so Django raises `DisallowedHost` and answers 400. The healthcheck never passes even though the app is perfectly healthy, and the deploy log only shows the generic retry message. It also explains why your live deployment keeps working: real users hit your public domain, which is allowed. Confirm it in 10 seconds from `railway ssh`: `curl -i -H "Host: healthcheck.railway.app" http://127.0.0.1:$PORT/salud/` A 400 means that's it. You should also see `Invalid HTTP_HOST header: 'healthcheck.railway.app'` in your logs. Fix: add `"healthcheck.railway.app"` to `ALLOWED_HOSTS` in your settings. If it only started failing around the time you noticed, check whether `ALLOWED_HOSTS` is built from an environment variable that changed then.
a month ago
Tu tá fazendo totalmente errado você não pode pedir para ela fazer isso você não sabe se ela tá com o domínio público ou não, então a gente não pode ficar fazendo bruxaria tentando adivinhar o que está acontecendo em vez de ajudar
dicecodes
One thing worth double-checking that isn't fully covered by your curl tests: is Service Settings → Networking → Target Port set to the exact same value as whatever $PORT resolves to at runtime for this deployment? Curl-ing 127.0.0.1:$PORT and 0.0.0.0:$PORT from inside the container confirms the app is listening correctly — but it doesn't confirm Railway's healthcheck prober is aimed at that same port. The prober reads the dashboard's Target Port setting, which is a separate value from whatever $PORT actually resolves to inside your process. If those two have drifted apart (e.g. a settings change at some point, or a difference between how this service was originally configured vs. now), you'd see exactly this symptom: app boots and serves fine internally, but the healthcheck phase times out because it's probing the wrong port. This is worth checking specifically because a near-identical "healthcheck hangs for the full timeout despite the app being verifiably healthy" case was just solved by exactly this — Target Port and PORT had silently diverged. If they already match, this isn't it — but it's a 30-second check worth ruling out before assuming it's edge/proxy-side.
a month ago
Realmente sem gastar dinheiro nenhum DNS domínio privado zero trust você controla seu vps com controle remoto você vai nem precisar ficar vindo aqui fazer login eu não vou ficar mandando 10 mensagem não quando a pessoa precisa de ajuda a pessoa recebe ajuda já que você não quer faz o que ele falou lá coloca aquele domínio lá aquele ip domínio privado requer total conhecimento sobre o DNS e sem infraestrutura de rede é errado não mas existe forma de você ter um domínio privado zero trust de graça e você não precisa quebrar a cabeça para implementar nada não é um clique
adama-diallo-rse
One thing your curl tests can't catch is the Host header. Railway's healthcheck prober sends its requests with the hostname `healthcheck.railway.app` (it's in the Healthchecks docs: https://docs.railway.com/reference/healthchecks). When you run curl against 127.0.0.1:$PORT from inside the container, Django sees `Host: 127.0.0.1`, which is most likely in your `ALLOWED_HOSTS`. The prober's host isn't, so Django raises `DisallowedHost` and answers 400. The healthcheck never passes even though the app is perfectly healthy, and the deploy log only shows the generic retry message. It also explains why your live deployment keeps working: real users hit your public domain, which is allowed. Confirm it in 10 seconds from `railway ssh`: `curl -i -H "Host: healthcheck.railway.app" http://127.0.0.1:$PORT/salud/` A 400 means that's it. You should also see `Invalid HTTP_HOST header: 'healthcheck.railway.app'` in your logs. Fix: add `"healthcheck.railway.app"` to `ALLOWED_HOSTS` in your settings. If it only started failing around the time you noticed, check whether `ALLOWED_HOSTS` is built from an environment variable that changed then.
a month ago
Nesse que sofre mais ataque, quando você pega o IP que é público quase todo mundo sabe e transforma ele domínio público você está sujeito a ataque interceptação wwbhook você nunca pode apontar wwbhook e fazer Heathcheck pau que seja público e outra o que traz segurança não DNS não e se o domínio zero trust
lordv22
Nesse que sofre mais ataque, quando você pega o IP que é público quase todo mundo sabe e transforma ele domínio público você está sujeito a ataque interceptação wwbhook você nunca pode apontar wwbhook e fazer Heathcheck pau que seja público e outra o que traz segurança não DNS não e se o domínio zero trust
a month ago
Eu eu achei que as pessoas que fosse mais coerente tivesse um pouco mais de conhecimento mas eu vou ficar perdendo meu tempo aqui nessa plataforma não em vez de ajudar os outros eu vou olhar para o meu próprio projeto quem quiser de ajuda que beleza que não quiser se vire sozinho tô cansado já muito amadorismo

