سؤال

أحاول الحصول على 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'

أنا تشغيل بيثون 2.7.2 على النعناع لينكس

هل كانت مفيدة؟

المحلول

أحصل على هذا الخطأ نفسه مع جيفنت ويبسوكيت 0.3.4 و جيفنت 0.13.6 عند تشغيل gunicorn -k "geventwebsocket.gunicorn.workers.GeventWebSocketWorker" example:app مثال.

تأتي المشكلة من عدم تطابق التوقعات بين جيفنت وجونيكورن.وحدة بيوسجي جيفنت تتوقع كائن المسجل الذي ينفذ write الطريقة ، مثل كائنات الملف ، ستدوت ، الخ.غونيكورن ، ومع ذلك ، يمر في كائن الذي لديه المسجل طرق (تصحيح ، معلومات ، خطأ ، حرج ، تحذير ، إلخ).

رمز المشكلة في بيوسجي:

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

لإصلاح هذا لنفسي ، وأنا اخترق خطوط في مفترق جيفنت وتغييرها إلى ما يلي:

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 وأضاف إلى ملف التطبيق الرئيسي الرئيسي giveacodicetagpre.

إلى HEDER حتى لا يتعين علي تعديل مكتبات الطرف الثالث.

يرجى استخدام أحدث إصدارات GEVENT و GEVENT-Websocket على Pypi.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top