Example repository to deploy an Flask project to Heroku
Branch: master
Clone or download
Latest commit 4bd75fd Jul 6, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore Initial commit May 11, 2018
LICENSE Initial commit May 11, 2018
Pipfile add requirements May 11, 2018
Pipfile.lock add requirements May 11, 2018
Procfile add heroku runtime and procfile May 11, 2018
README.md Update README.md Jul 7, 2018
app.py add simple json api with flask May 11, 2018
runtime.txt add heroku runtime and procfile May 11, 2018

README.md

Deploy Your Flask Project To Heroku

This is an example repository that uses Flask and Gunicorn to deploy your project to Heroku.

Problematic

Currently, Flask is not suitable for a production environment and it doesn't scale well (see flask documentation on deployment).

If we want to deploy our project to Heroku, we need a Web Server Gateway Interface (WSGI) such as Gunicorn.

Solution

To overcome this obstacle we can use Gunicorn to aide us deploy our Flask project into a Heroku app.

This guide assumes that you already had gone through the process of installing and authenticating the Heroku Toolbelt.

Fork The Repository

You should fork the repository and then clone it so you can manage your own repo and use this only as a template.

$ git clone https://github.com/your_username/flask-heroku-example.git

At this point you should be able to modify the Flask app app.py:

"""Flask App Project."""

from flask import Flask, jsonify
app = Flask(__name__)


@app.route('/')
def index():
    """Return homepage."""
    json_data = {'Hello': 'World!'}
    return jsonify(json_data)


if __name__ == '__main__':
    app.run()

WARNING: If you change the file name (app.py) and the Flask app (app = Flask(__name__)) then remember to change Heroku's Procfile:

web: gunicorn <filename>:<app_name>

Create Your Heroku App

You can also leave your_app_name empty if you want Heroku to create a randomized name.

$ heroku create your_app_name
Creating app... done, ⬢ your_app_name
https://your_app_name.herokuapp.com/ | https://git.heroku.com/your_app_name.git

Deploy Your Project

Your project is going to be deploy using gunicorn as a web server using the Procfile and it will be detected as a Python project since it is declared in runtime.txt

  • Add necessary files and commit them
$ git add -A
$ git commit -am "finished flask project"
  • Push to Heroku
$ git push heroku master
-- SNIP --
remote: -----> Python app detected
remote: -----> Installing python-3.6.5
remote: -----> Installing pip
remote: -----> Installing dependencies with Pipenv 11.8.2…
remote:        Installing dependencies from Pipfile.lock (59a99c)…
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote:
remote: -----> Compressing...
remote:        Done: 53.9M
remote: -----> Launching...
remote:        Released v3
remote:        https://your_app_name.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/your_app_name.git
 * [new branch]      master -> master

That's it, you can visit your app now with heroku open.