3

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'

Mint Linuxでpython 2.7.2を実行しています

4

3 に答える 3

8

@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

サードパーティのライブラリを変更する必要がないように注意してください。

于 2012-07-02T22:02:55.760 に答える
3

サンプルを実行すると、gevent-websocket 0.3.4 と gevent 0.13.6 で同じバグが発生しますgunicorn -k "geventwebsocket.gunicorn.workers.GeventWebSocketWorker" example:app

この問題は、gevent と gunicorn の間の期待の不一致から生じます。Gevent の pywsgi モジュールは、writeファイル オブジェクト、stdout などのメソッドを実装するロガー オブジェクトを想定しています。ただし、Gunicorn は、ロガーメソッド (デバッグ、情報、エラー、クリティカル、警告など) を持つオブジェクトを渡します。

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')
于 2012-04-05T08:56:12.923 に答える
1

PyPi では最新バージョンの gevent と gevent-websocket を使用してください。

于 2012-02-26T09:32:08.720 に答える