Please help me I’m planning to go live this week after testing everything on the free tier Render plans, and I wanted to upgrade my plan to a higher tier.
The Postgres plan upgrade went smoothly, no issues.
However, when I attempt to upgrade from Free to Starter Plus on my Web Service, the deploy succeeds, but Render never recognizes my health check as passing. I gave it half an hour, and then did a manual “clean build cache and redeploy” operation. Doing that correctly got my app live, but my service still reads as being on the Free plan.
I have changed nothing about my backend app that works 100% correctly on the Free tier plan. I am only changing the Render tier. I’m not sure why changing the plan causes the health check to break.
Nothing in the build log indicates any issues with the build or starting of the app, everything should be working
I attempted something that also failed, and now I’m really not sure what’s going on.
Since the health check appeared to be the failure location, I deleted the health path for my app. I waited for that deploy to complete successfully (it did) and then I attempted to upgrade the Render tier without the health check.
However, despite my hopes, the deploy failed. I don’t see a reason for the failure on my side, but it looks like the attached image.
There is nothing wrong with my app, everything compiles and starts fine just like it does on the Free tier. The deployment just never finalizes even without a health check and fails due to timeout.
I tried a couple more things with no success:
I tried changing my app port from 10000 to 26156 to make sure I’m not accidentally hitting a port conflict with anything. No change, port change is fine on Free tier, but health check fails on non-free.
I did some research and found this thread:
Zero-downtime sane defaults
Which mentions the behavior of Render when no health check is defined. Basically, it should run a port scan.
I deleted my health check path again, and re-deployed on the free tier to check, and I see this in my server log:
Apr 11 12:08:49 PM [2022-04-11 22:08:49.443] http: GET index.html (66 ms) 200
Apr 11 12:08:49 PM [2022-04-11 22:08:49.874] http: GET index.html (86 ms) 200
So on the free tier, I can see Render doing the port scan on my application successfully.
I then attempted the plan upgrade again with out the health check path, and I waited.
And I kept waiting. The health check on the non-free tiers for some unknown reason does not reach my application.
Why is this happening?
After speaking with support, the issue was that my application must bind to 0.0.0.0 instead of localhost.
Apparently binding to localhost only works in the free tier and will break in any paid tier.
I want to leave some feedback here for Render. I hope this gets seen.
I took a jog through my code history, and I found out that the bind to localhost change was made in response to some kind of issue I ran into when I deployed to Render’s free tier. Originally, my app was binding to 0.0.0.0 correctly.
I think that Render should note somewhere in their documentation what the recommended configuration is between free and paid tiers. Or at least mention that 0.0.0.0 is the recommended binding for all paid tiers.
I’m not sure if the localhost change was the appropriate solution for free tier, but if it is, I’d like to see it documented somewhere that apps should bind to localhost on free, but be prepared to change the binding to 0.0.0.0 when upgrading to paid.
Thanks very much for taking the time to update your community post and including feedback. Also glad to hear you’re up and running.
I completely agree we can do better on explaining the host/port basics, we’re continuing to work on improving the documentation on this (and lots more) to make situations like this clearer.
Thanks for using Render!
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.