【发布时间】:2018-11-15 11:26:21
【问题描述】:
我正在密切关注offloading WebSockets and SSE 上的 uWSGI 教程。 但是,我的 Django 工作人员无法启动,因为 uWSGI 无法注册路由。当我只用一个日志调用替换 SSE 服务的套接字时,它就可以注册它。我确实确保了套接字存在(我正在使用皇帝来启动两个 uWSGI 配置)。
我发现 this other StackOverflow 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插件?医生说这是必要的。 uwsgi-docs.readthedocs.io/en/latest/InternalRouting.html#uwsgi -
谢谢,这很可能是问题所在 :-) 但是,我注意到一个更简单的错误:我使用 pip 重新编译了 uwsgi,而没有先删除 Alpine Linux 包 - 然后改为调用 alpine 版本pip 版本的。调用 Alpine 版本会加载正确的插件(包括您提到的插件)并且路由工作正常。由于您的评论听起来仍然可以解决问题,因此如果您快速写一个,我会接受它作为答案。
标签: django server installation uwsgi