Flask -SocketIO приложение, работающее на Gunicorn, выдает TypeError - PullRequest
0 голосов
/ 26 марта 2020

У меня есть рабочий Flask -SocketIO сервер, но он не работает с Gunicorn. Соответствующая часть сервера выглядит следующим образом:

def main(env, resp):

    app = Flask(__name__,
                static_url_path='',
                static_folder='dist',
                template_folder='dist')

    socketio = SocketIO(app)

    @app.route('/')
    def home():
        return app.send_static_file('index.html')

    # socketio.run(app, host='0.0.0.0', port=8000) I comment this out when using Gunicorn because otherwise it tries to run the process twice and throws an error.

Я использую eventlet и выполняю следующую команду, как описано в Flask -SocketIO документах здесь :

gunicorn --worker-class eventlet -b 0.0.0.0:8000 -w 1 index:main

Процесс gunicorn запускается нормально, но когда я перехожу на страницу, я получаю следующую ошибку сервера:

Error handling request /
Traceback (most recent call last):
  File "/home/myusername/.local/lib/python3.6/site-packages/gunicorn/workers/base_async.py", line 55, in handle
    self.handle_request(listener_name, req, client, addr)
  File "/home/myusername/.local/lib/python3.6/site-packages/gunicorn/workers/base_async.py", line 113, in handle_request
    for item in respiter:
TypeError: 'NoneType' object is not iterable

Я не могу найти информацию об этой ошибке и ценю любые идеи.

1 Ответ

0 голосов
/ 27 марта 2020

Мне пришлось вернуть приложение из main (). Дополнительные аргументы в основном не нужны. Я также добавил файл wsgi:

from index import main

if __name__ == '__main__':
    main()
else:
    gmain = main()

Затем запустил gunicorn, используя этот файл: gunicorn -k eventlet -b 0.0.0.0:8000 -w 1 wsgi:gmain, и это сработало. Seleniumwire бросил ошибки, но это выходит за рамки этого вопроса.

...