Heroku Removed Their Free Tier: Render Rises

Heroku Removed Their Free Tier: Render Rises

Moving your Tornado Python project to Render

·

5 min read

You might have read online, from sources such as Qovery, Heroku will move away from offering a free tier for all new and existing projects. Migrating your Heroku project to Render.

Setup

Here we will walk through creating a web application with a database on Render, we will base this project off the Queries Library Tutorial and in the process update to Tornado 6.2.

Create Render Account

First we need to create an account at https://render.com/ by clicking at the "GET STARTED FOR FREE" purple button on their interface. Use one of your accounts, fairly standard as shown in the image below:

2022-11-30_16-35-57.png

After confirming your email/account you should have a dashboard as shown below, which you can use to create you web application and database.

2022-11-30_16-38-39.png

Create Database

Once we have click on the PostgreSQL link, we can fill in the following form to create the database. In my case I named the database booksdb as we did on the Queries tutorial.

2022-11-15_13-31-44.png

You need to use the following database information to connect to the database through pgAdmin, like we did on the Queries library tutorial in order to create the tables for this project, the info can be found in the screen below:

2022-11-15_13-36-00.png

Create the tables in the database connecting to it through pgAdmin and running the following using the following SQL code:

And finally you should see the following after running a SELECT query on your booksdb database:

2022-11-30_17-11-50.png

Create Web Service

We are going to now create our Tornado project, upgrade it, create a webservice, and deploy it.

Setup Tornado

Since we have covered this before, we are going to fork/pull our Queries repo code from here and modify it by updating to the latest version of Tornado.

If you do pull the code, please give it a star! It is barebones to give you a template for your project.

Update Tornado

First we need to change our requirements.txt file to the latest version of Tornado, and change it as follows:

passlib==1.7.2
tornado==6.2
cryptography
queries

Since this is a new project we also want to create a local virtual environment, by executing the following commands and then installing the libraries needed.

For MacOS and Linux we would follow these steps:

> python3 -m venv .venv
> source ./.venv/bin/activate
> pip install --upgrade pip
> pip3 install -r ./requirements.txt

For Windows we need to do the following:

PS C:\dev\medium\tornado-render> python -m venv .venv
PS C:\dev\medium\tornado-render> .\.venv\Scripts\activate
(.venv) PS C:\dev\medium\tornado-render> pip install -r .\requirements.txt

Now we are ready to start upgrading our code!

We need to modify how we run our listener by modifying the main function and the how we run our Tornado app.py so that it looks like the following:

Once this changed, we can run our python app.py command and we will see the following in our terminal:

2022-12-01_13-34-16.png

Make sure to have your local environment variable BOOKS_DB_CONN pointing to the external access postgres connection string (you can get it from the PostgreSQL database Info section under Connections.

Create Web Service in Render

Now we are going to create the webservice from one of our existing repos, in my case I used Github, and this is straight forward process is guided through the following prompts once you have clicked on "Create Web Service" and the standard prompts from connecting to your github account and repo.

2022-11-30_16-46-02.png

Once created the latest repo will be pulled from the specified github/gitlab server.

Environment Variables

Last we need to create an environment variable, in this case is BOOKS_DB_CONN on the dashboard for the web service in order to store the connection string for the database. Copy the internal database connection string from your PostgreSQL project and paste it into a new environment variable as shown below.

2022-12-01_16-46-03.png

Finally, at this point everything is setup with the Tornado server, saving the changes to the environment variables will trigger a new deploy job, and now you can see your site live. In our case we want to browse to .onrender.com/api/books just make sure to replace with the name of your webservice. You should see the following when querying for books:

2022-12-01_17-23-40.png

Render Dashboard

Now we should have two projects on your Render dashboard as the following image with all the perfect green status for each of the projects as shown below.

2022-12-01_17-13-38.png

Conclusion

You can review the full source code to the project here, as you can see it is very simple process to get your backend up and running on Render. The database is only free for the first 90 days, but that is usually plenty of time to test a project and afterwards it is only $7.00 USD/month. The web service can be hosted for free, but if you want to upgrade it will cost another $7.00 USD/month for the Starter plan, but you can keep your service in the Free Tier as we were able to in Heroku. The most important thing to keep in mind is that this is an option to leverage, that required no code change on your Tornado app to make it run on a different platform other than some configurations for Environment Variables and how to run your app.py. Hope this helps!!!

Did you find this article valuable?

Support Alessandro by becoming a sponsor. Any amount is appreciated!