This is documented on the Flask site, but I was trying to help someone debug some old server code that I'd written and couldn't remember how to debug it, so I'm documenting it here as I go through remembering it again so I'll have a single reference to use the next time. Some of the settings look different from what I remember using so I think that Flask has changed a little over time, but since I didn't document it the first time I don't have a record to compare against (well, I probably have some notes in a notebook but it's hard to refer to that when sitting at someone else's desk).
The Flask Quickstart tells you what to do, but for some reason when we googled it, the instructions were different, I think it might have lead us to an older form of the documentation. This is the current version (May 20, 2018.)
The Environment Variables
The Flask App
First you have to tell flask which file contains your flask app by setting the
FLASK_APP environment variable. In my case I'm using connexion, an oddly-named adapter that adds support for swagger/OpenApi to Flask. So the file that has the app has this line in it.
application = connexion.FlaskApp(__name__)
In this case that's a file named
api.py which we'll say is in the
server folder (it isn't, but that's okay) so we need to set our environment accordingly. I use the fish shell so the syntax is slightly different from the Quick Start example. Also - and this caused me a lot of trouble - when I didn't pass in the name of my
FlaskApp instance I got this error:
Error: Failed to find application in module "server.api". Are you sure it contains a Flask application? Maybe you wrapped it in a WSGI middleware or you are using a factory function.
So I had to specifically tell flask the name of my app by appending it to the end of the setting (perhaps it is looking for
app specifically, but I called mine
set -x FLASK_APP server.api:application
If you want the server to automatically reload when it detects changes then you should to set the
FLASK_ENV environment variable to
development. This is similar to using
FLASK_DEBUG but I think it adds the reloading. Anyway, it does more than just set debug mode.
set -x FLASK_ENV development
The Development server
This is the output of the help string for the development server, note that it uses
host so you need to pass in
--help to see this output or you will get an error.
flask run --help
The default server runs on localhost, but since I'm hosting the code on a raspberry pi sitting on the network somewhere but debugging it remotely, I need to run it on a public address.
flask run --host=0.0.0.0