首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gunicorn和websockets

gunicorn和websockets
EN

Stack Overflow用户
提问于 2012-02-25 21:28:30
回答 3查看 4.3K关注 0票数 3

我正在尝试运行http://www.gelens.org/code/gevent-websocket/,并不断收到以下错误。

代码语言:javascript
复制
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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-05 16:56:13

在运行gunicorn -k "geventwebsocket.gunicorn.workers.GeventWebSocketWorker" example:app示例时,我在gevent-websocket 0.3.4和gevent 0.13.6中遇到了同样的错误。

问题来自于gevent和gunicorn之间的期望不匹配。Gevent的pywsgi模块需要一个实现write方法的记录器对象,如文件对象、标准输出等。然而,Gunicorn传入一个具有Logger方法(调试、信息、错误、关键、警告等)的对象。

pywsgi中的问题代码:

代码语言:javascript
复制
def log_request(self):
    log = self.server.log
    if log:
        log.write(self.format_request() + '\n')

为了自己解决这个问题,我修改了gevent分支中的代码行,并将它们更改为以下代码:

代码语言:javascript
复制
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')
票数 3
EN

Stack Overflow用户

发布于 2012-07-03 06:02:56

使用@bkad的代码并添加到主应用程序文件中

代码语言:javascript
复制
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

这样我就不必修改第三方的库了。

票数 8
EN

Stack Overflow用户

发布于 2012-02-26 17:32:09

请在PyPi上使用最新版本的gevent和gevent-websocket。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9444405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档