Dealing with 504 and 502 errors in Flask applications

The most common problem we see with Flask sites is that people try and call

app.run()
# don't do this!

This tries to launch Flask's own development server, which is not necessary on PythonAnywhere, because we do the server part for you. Starting a development server will just block your code, meaning that it can never receive requests from our web-hosting system.

All you need is to import your Flask app object into your WSGI file -- something like this:

from my_flask_app import app as application

The app object has to be renamed application, like that.

Do not call app.run() anywhere in your code as it will conflict with the PythonAnywhere workers and cause errors (normally with error code 504, but sometimes with code 502).

If you want to be able to run your code on your own machine in test mode, then you can guard the app.run() like this:

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

That means that you can run the development server with something like python mysite.py on your own machine, but the app.run() is prevented from running on PythonAnywhere because on our system, __name__ will not be equal to '__main__'.

Other than that, be sure to check out our guide to debugging import errors for general tips on dealing with problems in your WSGI config.