Ошибка при запуске приложения Flask с веб-сокетами и Gunicorn - PullRequest
0 голосов
/ 10 июня 2019

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

[2019-06-10 20:12:20 +0200] [34160] [ERROR] Socket error processing request.
Traceback (most recent call last):
  File "/Users/user/Documents/project/venv/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 135, in handle
    self.handle_request(listener, req, client, addr)
  File "/Users/user/Documents/project/venv/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 191, in handle_request
    six.reraise(*sys.exc_info())
  File "/Users/user/Documents/project/venv/lib/python3.6/site-packages/gunicorn/six.py", line 625, in reraise
    raise value
  File "/Users/user/Documents/project/venv/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 183, in handle_request
    resp.close()
  File "/Users/user/Documents/project/venv/lib/python3.6/site-packages/gunicorn/http/wsgi.py", line 409, in close
    self.send_headers()
  File "/Users/user/Documents/project/venv/lib/python3.6/site-packages/gunicorn/http/wsgi.py", line 329, in send_headers
    util.write(self.sock, util.to_bytestring(header_str, "ascii"))
  File "/Users/user/Documents/project/venv/lib/python3.6/site-packages/gunicorn/util.py", line 304, in write
    sock.sendall(data)
OSError: [Errno 9] Bad file descriptor

Моя конфигурация gunicorn следующая, я выполнил ее с помощью gunicorn -w 4 -b 0.0.0.0: 8080 uwsgi: app config = config.ini:

[server:main]
workers = 4
worker_class = 'eventlet'
bind = '0.0.0.0:8080'
reload = False
daemon = True
timeout = 1200
port = 8080

Код для подключения через веб-сокет через Flask-SocketIO:

app = Flask(__name__)
Session(app)
socketio = SocketIO(app)

Я использую Flask-SocketIO, сейчас япросто пытаюсь заставить работу сокета работать на сервере wsgi без Nginx на моей локальной машине.Любые предложения о том, в чем может быть проблема?Не могу собрать воедино из этих журналов ошибок - заранее спасибо за любой совет!

1 Ответ

0 голосов
/ 15 июня 2019

Я должен был указать рабочий как eventlet, теперь он работает на локальной машине с gunicorn.Я сделал это, запустив:

gunicorn -w 1 -b 0.0.0.0:8080 app: app - eventlet-classerlet --reload

...