Frage

Ich versuche es zu bekommen http://www.gelens.org/code/gevent-websocket/ läuft und es wird weiterhin die folgende Fehlermeldung angezeigt.

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'

Ich verwende Python 2.7.2 unter Mint Linux

War es hilfreich?

Lösung

Ich bekomme den gleichen Fehler mit gevent-websocket 0.3.4 und gevent 0.13.6, wenn ich das ausführe gunicorn -k "geventwebsocket.gunicorn.workers.GeventWebSocketWorker" example:app Beispiel.

Das Problem ergibt sich aus einem Missverhältnis der Erwartungen zwischen Gevent und Gunicorn.Das Pywsgi-Modul von Gevent erwartet ein Logger-Objekt, das a implementiert write Methode, wie Dateiobjekte, stdout usw.Gunicorn übergibt jedoch ein Objekt, das dies getan hat Logger Methoden (Debug, Info, Fehler, Kritisch, Warnung usw.).

Der Problemcode in pywsgi:

def log_request(self):
    log = self.server.log
    if log:
        log.write(self.format_request() + '\n')

Um das Problem für mich selbst zu beheben, habe ich die Zeilen in einem Gevent-Fork zerhackt und wie folgt geändert:

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')

Andere Tipps

@ BKAD-Code verwendet und zur Haupt-Haupt-App-Datei hinzugefügt generasacodicetagpre.

an Heerer, damit ich 3RD-Partei-Bibliotheken nicht ändern müsste.

Bitte verwenden Sie die neuesten Versionen von GEVENT und GEVENT-WebSocket auf PYPI.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top