Tôi đang chạy một dự án django sử dụng gevent-socketio.gevent-socketio nginx uwsgi không hoạt động cùng nhau trên máy chủ phát triển
Đối với một số lý do trên máy chủ phát triển của tôi, tất cả các yêu cầu WebSockets tôi được trả lại một thông điệp 101 pending
mà socketio sẽ bắt đầu đi xe đạp qua tất cả các giao thức khác mà dẫn đến một tình trạng pending
.
Các lỗi trong nhật ký uwsgi của tôi là:
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/"
tại địa phương, tôi không có vấn đề này. Tôi bắt đầu máy chủ sử dụng python run.py
run.py về môi trường địa phương của tôi
#!/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()
On phát triển máy chủ của tôi, nơi mà các lỗi đang xảy ra, tôi có các cài đặt sau:
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()
thông tin khác:
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
Bạn có thể có thể thử chạy nó với một quá trình và xem nếu vấn đề vẫn còn? Tôi cũng gặp rắc rối với gevent-socketio với nhiều công nhân sử dụng gunicorn, không chắc chắn nếu nó có liên quan https://github.com/abourget/gevent-socketio/issues/132?source=cc. Ngoài ra sử dụng uwsgi với gevent dường như rất lỗi ... https://github.com/abourget/gevent-socketio/issues/81?source=cc –
@BernhardVallant Cảm ơn bạn đã bình luận. Liên kết gunicorn khá hữu ích.Tôi không có nhiều thời gian để gỡ lỗi này ngay bây giờ nhưng khi tôi làm, tôi sẽ cố gắng nhớ để cập nhật bài đăng này. – super9
@ super9 Tôi biết đây là một câu hỏi cũ, nhưng tôi tự hỏi nếu bạn đã bao giờ giải quyết những gì đã cho bạn lỗi? Tôi đang gặp phải sự cố tương tự hiện tại. Đã cập nhật – jbll