Gunicorn и Websockets.
Вопрос
Решение
Я получаю эту же ошибку с Gevent-Websocket 0.3.4 и Gevent 0.13.6 при запуске примера gunicorn -k "geventwebsocket.gunicorn.workers.GeventWebSocketWorker" example:app
.
Проблема исходит от несоответствия ожиданий между Gevent и Gunicorn.Модуль Gevent Pywsgi ожидает объекта регистратора, который реализует метод write
, как файловые объекты, STDOUT и т. Д. Гункорн, однако, проходит в объекте, который имеет
Код проблемы в Pywsgi:
def log_request(self):
log = self.server.log
if log:
log.write(self.format_request() + '\n')
.
Чтобы исправить это для себя, я взломал линии в вилке Gevent и изменил их на следующее:
def log_request(self):
log = self.server.log
if log:
if hasattr(log, "info"):
log.info(self.format_request() + '\n')
else:
log.write(self.format_request() + '\n')
. Другие советы
Используется код BKAD и добавлен в основной основной файл приложения
def log_request(self):
log = self.server.log
if log:
if hasattr(log, "info"):
log.info(self.format_request() + '\n')
else:
log.write(self.format_request() + '\n')
import gevent
gevent.pywsgi.WSGIHandler.log_request = log_request
.
к хедуру, чтобы я не должен был изменять 3-й партийные библиотеки.
Пожалуйста, используйте последние версии Gevent и Gevent-Websocket на Pypi.