Это было полезно?

Решение

Я получаю эту же ошибку с 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top