2013-05-23 7 views
7

पर एक साथ काम नहीं कर रहा है मैं एक django परियोजना चला रहा हूं जो gevent-socketio का उपयोग करता है।gevent-socketio nginx uwsgi विकास सर्वर

मेरे विकास सर्वर पर किसी कारण से, मेरे सभी वेबसाइकिल अनुरोध 101 pending संदेश लौट रहे हैं, जिस पर सॉकेटियो अन्य सभी प्रोटोकॉल के माध्यम से साइकिल चलाना शुरू कर देगा जिसके परिणामस्वरूप pending स्थिति हो जाएगी।

त्रुटि मेरी uwsgi लॉग में है:

2013/05/23 16:09:08 [error] 14485#0: *85 upstream timed out (110: Connection timed out) while reading upstream, client: x.x.x.x, server: dev.proj.co, request: "GET /socket.io/1/xhr-polling/116404981619?t=1369325348489 HTTP/1.1", upstream: "http://127.0.0.1:4042/socket.io/1/xhr-polling/116404981619?t=1369325348489", host: "dev.proj.co", referrer: "http://dev.proj.co/map/bycon/" 

स्थानीय स्तर पर, मैं इस समस्या नहीं है। मैं अपने स्थानीय पर्यावरण

#!/usr/bin/env python 
import os 
import sys 

from gevent import monkey 
monkey.patch_all() 

import django.core.handlers.wsgi 
from socketio.server import SocketIOServer 

import os 

PORT = 8000 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "proj.settings") 
application = django.core.handlers.wsgi.WSGIHandler() 
PROJECT_DIR   = os.path.realpath(os.path.dirname(__file__)) 
sys.path.insert(0, PROJECT_DIR) 
sys.path.insert(0, os.path.join(PROJECT_DIR, "chat")) 

if __name__ == '__main__': 
    SocketIOServer(('', PORT), application, resource="socket.io").serve_forever() 

पर सर्वर का उपयोग कर python run.py

run.py शुरू मेरी विकास सर्वर, जहां बग हो रहा है, मैं सेटिंग निम्नवत है पर:

nginx.conf

worker_processes auto; 

events { 
    worker_connections 1024; 
} 

http { 
    include  mime.types; 
    default_type application/octet-stream; 
    sendfile  on; 
    keepalive_timeout 65; 

    gzip on; 
    upstream django { 
     server 127.0.0.1:4042; 
    } 


    server { 
     listen  80; 
     server_name dev.proj.co; 
     charset utf-8; 

     access_log /var/log/nginx/myproj_dev.access.log; 
     error_log /var/log/nginx/myproj_dev.error.log; 

     location /media/ { 
      alias /var/www/dev/myproj/releases/myproj_public/media/; 
      error_page 404 = /404; 
      expires 30d; 
     } 

     location /static/ { 
      alias /var/www/dev/myproj/releases/myproj_public/static/; 
      error_page 404 = /404; 
      expires 30d; 
     } 
     location/{ 
      proxy_pass http://127.0.0.1:4042; 
      proxy_http_version 1.1; 
      proxy_set_header Upgrade $http_upgrade; 
      proxy_set_header Connection "upgrade"; 
     } 
    } 
} 
,210

uwsgi_dev.ini

[uwsgi] 

if-env = PROJECT_HOME 
print = Your path is %(_)/current 
chdir = %(_)/current 
touch-reload = %(_)/current/myproj/uwsgi_dev.ini 
daemonize = %(_)/myproj_uwsgi/myproj.log 
endif = 

if-env = VIRTUAL_ENV 
print = Your virtualenv is %(_) 
virtualenv = %(_) 
endif = 

gevent = 100 
processes = 4 
module = myproj.wsgi_dev 
env = DJANGO_SETTINGS_MODULE=myproj.settings.dev 
master = True 
vacuum = True 
max-requests = 5000 
logdate = True 

# newrelic requirements 
enable-threads = True 
single-interpreter = True 

wsgi_dev.py

import os 

from gevent import monkey 
monkey.patch_all() 

from socketio.server import SocketIOServer 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproj.settings") 
from django.core.wsgi import get_wsgi_application 
application = get_wsgi_application() 

PORT = 4042 
SocketIOServer(("127.0.0.1", PORT), application, \ 
     resource="socket.io").serve_forever() 

अन्य जानकारी:

I'm using uwsgi 1.9.6, gevent-websocket 0.3.6, greenlet 0.4.0 and the dev version of gevent(-e git://github.com/surfly/[email protected]#egg=gevent-dev) and gevent-socketetio (-e git://github.com/abourget/[email protected]#egg=gevent_socketio-dev) 

[[email protected] ~]# nginx -v 
nginx version: nginx/1.4.1 
+0

आप शायद एक प्रक्रिया के साथ इसे चलाने की कोशिश करें और देखें कि समस्या बनी रहती है सकते हैं झूठी कोशिश? मुझे ग्रीनकॉर्न का उपयोग करके कई श्रमिकों के साथ गीवेंट-सॉकेटियो के साथ भी परेशानी हो रही है, यह सुनिश्चित नहीं है कि यह संबंधित है https://github.com/abourget/gevent-socketio/issues/132?source=cc। इसके अतिरिक्त gevent के साथ uwsgi का उपयोग बहुत छोटी लग रहा है ... https://github.com/abourget/gevent-socketio/issues/81?source=cc –

+0

@ बर्नार्डवॉलेंट टिप्पणी के लिए धन्यवाद। बंदूक लिंक बहुत उपयोगी था।मेरे पास अब इसे डीबग करने के लिए अधिक समय नहीं है लेकिन जब मैं करता हूं, तो मैं इस पोस्ट को अपडेट करने के लिए याद रखने की कोशिश करूंगा। – super9

+1

@ super9 मुझे पता है कि यह एक पुराना सवाल है, लेकिन मुझे आश्चर्य है कि क्या आपने कभी हल किया है कि आपको क्या त्रुटि दे रही है? मुझे वर्तमान में एक समान समस्या का सामना करना पड़ रहा है। – jbll

उत्तर

1

WebSockets के लिए समर्थन आप nginx की नवीनतम रिलीज की जरूरत है (1.4.x) । तुम बड़े विज्ञप्ति का उपयोग करते हैं आप WebSocket चैनल

+0

अपडेट किया गया। 1.4.1 – super9

0

SocketIOServer कभी नहीं चलेंगे रूप में आप एक मॉड्यूल के रूप WSGI Django फ़ाइल चल रहे हैं शुरू करने के लिए सक्षम नहीं होगा तो __name__

__main__ नहीं है इस तर्क के अलावा SocketIOServer यूओएसजीआई को yorur django ऐप अवरुद्ध करने के रूप में गलत है।

मैं सुझाव है कि आप uWSGI

की --attach-डेमॉन का उपयोग कर एक अलग स्क्रिप्ट से SocketIOServer चलाने (और स्पष्ट रूप से एक अलग बंदरगाह पर uWSGi डाल) UWSGI में

+0

का उपयोग कर @ रॉबर्टो का जवाब देने के लिए धन्यवाद। मुझे लगता है कि मेरे प्रश्न के वाक्यांश ने आपको भ्रमित कर दिया है। मैंने इसे स्पष्ट करने के लिए संशोधित किया है। मैं केवल 'run.py' फ़ाइल (जैसा कि ./manage.py रनरवर के विपरीत) स्थानीय रूप से उपयोग कर रहा हूं और यह ठीक काम करता है। समस्या मेरे विकास सर्वर पर सेटिंग्स है। – super9

0

अक्षम धागे के लिए।

आपके पास समस्या "ग्लोबल Interpretator लॉक"

सक्षम-सूत्र = सच < - मुझे लगता है कि यहाँ समस्या,

संबंधित मुद्दे