如何修复 uWSGI 内部路由?
How to fix uWSGI internal routing?
我正在密切关注 offloading WebSockets and SSE 上的 uWSGI 教程。
然而,我有一个问题,我的 Django worker 无法启动,因为 uWSGI 无法注册路由。当我仅用日志调用替换 SSE 服务的套接字时,它就能够注册它。我确实确保了套接字存在(我正在使用一个 emperor 来启动两个 uWSGI 配置)。
我发现 this other Whosebug question 建议启用 PCRE 支持(我已经这样做了)。我的日志文件中不再收到有关 PCRE 支持的警告。
这两天我正在尝试不同的可能性,我绝对需要有新思维的人的帮助。
这是我启动django worker时的日志(sse worker已经启动):
/usr/sbin/uwsgi --ini /usr/uwsgi/vassals.d/01_django.ini --die-on-term --need-app --plugin router_redirect
[uWSGI] getting INI configuration from /usr/uwsgi/emperor.ini
[uWSGI] getting INI configuration from /usr/uwsgi/vassals.d/01_django.ini
unable to register route "equal:${CONTENT_TYPE};text/event-stream uwsgi:/tmp/sseapp.sock,0,0"
command terminated with exit code 1
这是我的 01_django.ini 文件:
[uwsgi]
socket = /tmp/django.sock
chown-socket = nginx:nginx
chmod-socket = 664
; wait until the sse app is loaded
wait-for-socket = /tmp/sseapp.sock
; configuring the sse app
; http-socket = :9090
offload-threads = 2
wsgi-file = /srv/okmapgo/okmapgo/wsgi.py
plugins = python
; collect X-Offload-to-SSE header and store it in var X_OFFLOAD
collect-header = X-Offload-to-SSE X_OFFLOAD
collect-header = Content-Type CONTENT_TYPE
; if X_OFFLOAD is defined, do not send the headers generated by Django
;; response-route-if-not = empty:${X_OFFLOAD} disableheaders:
; if X_OFFLOAD is defined, offload the request to the app running on /tmp/sseapp
; start the sseapp beforehand using
; uwsgi --wsgi-file /srv/okmapgo/dilcher_messaging_kafka/sseapp.py --socket /tmp/sseapp --gevent 1000 --gevent-monkey-patch
;; response-route-if-not = empty:${X_OFFLOAD} uwsgi:/tmp/sseapp,0,0
;response-route-if = equal:${CONTENT_TYPE};text/event-stream log:route triggered
response-route-if = equal:${CONTENT_TYPE};text/event-stream uwsgi:/tmp/sseapp.sock,0,0
注释掉的 "response-rout-if" 条目有效,当前活动的条目无效 :-/
引用的socket确实存在(另一个uwsgi socket是皇上的socket):
ls -lahrt /tmp
total 8
drwxr-xr-x 1 root root 4.0K Nov 15 10:55 ..
srw-rw-r-- 1 nginx nginx 0 Nov 15 11:21 uwsgi.sock
srw-rw-r-- 1 nginx nginx 0 Nov 15 11:21 sseapp.sock
drwxrwxrwt 1 root root 4.0K Nov 15 11:21 .
我正在使用 uWSGI 版本 2.0.17.1。关于如何进行这项工作的任何提示/想法?
我认为您需要在配置中添加 router_uwsgi
插件。
我正在密切关注 offloading WebSockets and SSE 上的 uWSGI 教程。 然而,我有一个问题,我的 Django worker 无法启动,因为 uWSGI 无法注册路由。当我仅用日志调用替换 SSE 服务的套接字时,它就能够注册它。我确实确保了套接字存在(我正在使用一个 emperor 来启动两个 uWSGI 配置)。
我发现 this other Whosebug question 建议启用 PCRE 支持(我已经这样做了)。我的日志文件中不再收到有关 PCRE 支持的警告。
这两天我正在尝试不同的可能性,我绝对需要有新思维的人的帮助。
这是我启动django worker时的日志(sse worker已经启动):
/usr/sbin/uwsgi --ini /usr/uwsgi/vassals.d/01_django.ini --die-on-term --need-app --plugin router_redirect
[uWSGI] getting INI configuration from /usr/uwsgi/emperor.ini
[uWSGI] getting INI configuration from /usr/uwsgi/vassals.d/01_django.ini
unable to register route "equal:${CONTENT_TYPE};text/event-stream uwsgi:/tmp/sseapp.sock,0,0"
command terminated with exit code 1
这是我的 01_django.ini 文件:
[uwsgi]
socket = /tmp/django.sock
chown-socket = nginx:nginx
chmod-socket = 664
; wait until the sse app is loaded
wait-for-socket = /tmp/sseapp.sock
; configuring the sse app
; http-socket = :9090
offload-threads = 2
wsgi-file = /srv/okmapgo/okmapgo/wsgi.py
plugins = python
; collect X-Offload-to-SSE header and store it in var X_OFFLOAD
collect-header = X-Offload-to-SSE X_OFFLOAD
collect-header = Content-Type CONTENT_TYPE
; if X_OFFLOAD is defined, do not send the headers generated by Django
;; response-route-if-not = empty:${X_OFFLOAD} disableheaders:
; if X_OFFLOAD is defined, offload the request to the app running on /tmp/sseapp
; start the sseapp beforehand using
; uwsgi --wsgi-file /srv/okmapgo/dilcher_messaging_kafka/sseapp.py --socket /tmp/sseapp --gevent 1000 --gevent-monkey-patch
;; response-route-if-not = empty:${X_OFFLOAD} uwsgi:/tmp/sseapp,0,0
;response-route-if = equal:${CONTENT_TYPE};text/event-stream log:route triggered
response-route-if = equal:${CONTENT_TYPE};text/event-stream uwsgi:/tmp/sseapp.sock,0,0
注释掉的 "response-rout-if" 条目有效,当前活动的条目无效 :-/
引用的socket确实存在(另一个uwsgi socket是皇上的socket):
ls -lahrt /tmp
total 8
drwxr-xr-x 1 root root 4.0K Nov 15 10:55 ..
srw-rw-r-- 1 nginx nginx 0 Nov 15 11:21 uwsgi.sock
srw-rw-r-- 1 nginx nginx 0 Nov 15 11:21 sseapp.sock
drwxrwxrwt 1 root root 4.0K Nov 15 11:21 .
我正在使用 uWSGI 版本 2.0.17.1。关于如何进行这项工作的任何提示/想法?
我认为您需要在配置中添加 router_uwsgi
插件。