Я получаю ту же ошибку с gevent-websocket 0.3.4 и gevent 0.13.6 при запуске примера gunicorn -k "geventwebsocket.gunicorn.workers.GeventWebSocketWorker" example:app
.
Проблема возникает из-за несоответствия ожиданий между гевентом и ганкорном. Модуль Pyvents Gevent ожидает объект регистратора, который реализует метод write
, такой как файловые объекты, стандартный вывод и т. Д. Gunicorn, однако, передает объект, который имеет методы Logger (отладка, информация, ошибка, критический предупреждение и т. д.).
Код проблемы в 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')