Gunicorn и паутины - PullRequest
       28

Gunicorn и паутины

3 голосов
/ 25 февраля 2012

Я пытаюсь запустить http://www.gelens.org/code/gevent-websocket/ и постоянно получаю следующую ошибку.

socket_id=1 already closed.
    result = self._run(*self.args, **self.kwargs)
  File "/home/walt/virtualenv/ws/local/lib/python2.7/site-packages/gevent/pywsgi.py", line 571, in handle
    handler.handle()
  File "/home/walt/virtualenv/ws/local/lib/python2.7/site-packages/gevent/pywsgi.py", line 180, in handle
    result = self.handle_one_request()
  File "/home/walt/virtualenv/ws/local/lib/python2.7/site-packages/gevent/pywsgi.py", line 314, in handle_one_request
    self.handle_one_response()
  File "/home/walt/virtualenv/ws/local/lib/python2.7/site-packages/geventwebsocket/handler.py", line 26, in handle_one_response
    return self._handle_websocket()
  File "/home/walt/virtualenv/ws/local/lib/python2.7/site-packages/geventwebsocket/handler.py", line 50, in _handle_websocket
    self.log_request()
  File "/home/walt/virtualenv/ws/local/lib/python2.7/site-packages/gevent/pywsgi.py", line 394, in log_request
    log.write(self.format_request() + '\n')
AttributeError: 'Logger' object has no attribute 'write'

Я использую Python 2.7.2 на Mint Linux

Ответы [ 3 ]

8 голосов
/ 03 июля 2012

использовал код @ 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 голосов
/ 05 апреля 2012

Я получаю ту же ошибку с 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')
1 голос
/ 26 февраля 2012

Пожалуйста, используйте последние версии gevent и gevent-websocket на PyPi.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...