Search code examples
flaskwerkzeugflask-socketio

Flask SocketIO auto-reload is not working (on code change/development)


Auto reloader (on code change) works fine using app.run/flask run --host=0.0.0.0 --port 8080.

However as soon as I add flask_socketio to the mix it stops working.

E.g. bringing in:

from flask_socketio import SocketIO, send, emit
socketio = SocketIO(app, path='/kpi/socket.io')
socketio.run(app, host='0.0.0.0', port=8080, debug=True, use_reloader=True, use_debugger=True)

requirements.txt

Flask==1.0.2
Flask-Bootstrap==3.3.7.1
Gunicorn==19.8.1
inotify==0.2.9
pymysql==0.7.2
flask-socketio==3.0.1
eventlet==0.23.0
socketIO-client==0.7.2

I do get "* Restarting with stat" in the logs, same as I would if I was typically running flask.

Extraneous info: this is running in a docker container where I have a compose file for dev where I run the dev mode, and have an env variable for FLASK_DEBUG=1. Using nginx to proxy the rest to port 80 then I server that up to another local port. This all works fine and dandy until I add socketio.


Solution

  • Ending up doing this:

    Running this in dev (this brings in the werkzeug debugger for wsgi)

    # TODO run this only in dev
    from werkzeug.debug import DebuggedApplication
    app.debug = True
    app.wsgi_app = DebuggedApplication(app.wsgi_app, evalex=True)
    

    Then use supervisord and run uwsgi instead including the flag

    --py-autoreload 1
    

    Those both return the functionality I want in development. Just need to make them only run in dev mode now and I'm good.