Heroku vs Render
2 min read

Heroku vs Render

I'm familiar with and have been using Heroku since 2011, so for over a decade. Back then it was aimed at ruby-only software stacks and had some issues with performance and stability.
But for a few years now Heroku has proven to be a mature and stable platform with an easy way to deploy and maintain various applications (especially since they've introduced buildpacks) so it's my default choice to run my applications.

However, recent issues with security (it's been 2 weeks now since I was able to use the auto-deploy feature and there's no telling when it's back) and lack of innovation (object storage for example) made me look for a viable alternative. I've checked a few - Fly, Scalingo, and Render. I decided to ditch Fly, as I don't want to mess around with .toml files for deployment, and found Scalingo a bit too expensive for my needs.

That leaves me with Render (I've never even thought about managed (or not) k8s cluster as it's an overkill for my needs). The design behind it looks good, pricing seems to be fair and deployment turned out to be as easy as on Heroku. There's also direct SSH access to my services that could be useful for debugging! I've migrated my service there and tried it for a few days. And got back to Heroku.

Why? you may ask. For a couple of reasons:

  • networking - one of my regular background jobs is accessing an API that turned out to be unavailable on a random basis. I wasn't able to reproduce this issue anywhere else other than on Render. (if you're curious, the error is ruby's "Errno::EADDRNOTAVAIL" and is related to resolving and connecting to IPv6 addresses)
  • performance - despite choosing what I believed should be more powerful but turned out to be slower: the application was booting for a long time after new deployment, build times were longer, the overall experience was just worse (partly because of choosing US-West as a region as opposed to Europe on heroku)
  • Cloudflare - when you connect a custom domain to Render, it does use Cloudflare to cache your traffic, which is good, but when you suspend (suspend, not delete) your service...it still uses Cloudflare, so you cannot enable proxy feature on Cloudflare itself.
  • runtime - I'm using libvips (which is a standard image library for Rails 7) to generate opengraph images. On heroku it works (after using a custom buildpack) like a charm. On Render...it's is available at both build time and runtime, but for some reason, it fails to generate proper images (without throwing any errors)

As for runtimes - I could use a custom-built docker image and deploy that to Render and it would probably solve the last issue, but I wanted plug'n'play replacement for heroku where I can just git push and have the code deployed without a hassle.

With ongoing issues with heroku I'm just simply using git push heroku master within CI pipelines as I don't have a complex environment, so I don't want anything more than that on Render.

I know other people are having issues with things like static assets, caches, long build times, etc.

I'm not saying Render is a bad platform, it just doesn't fit my current requirements and needs some improvements. I'm happy to get back and check it out again in a year or so. Hopefully, the issues I've encountered will be solved by then.