gpt4 book ai didi

python - Django 信号不适用于多容器设置中的 channel

转载 作者:行者123 更新时间:2023-12-02 18:39:21 25 4
gpt4 key购买 nike

我有 django 应用程序并使用 channels 实现 websocket 支持和 channels api .我正在使用解复用器与我的模型绑定(bind)。例如,当我保存模型时,它会将更改发送到我打开的 websocket 连接。
如果我运行 ./manage.py runserver 0:80,一切正常并将所有内容放在一个容器中。 但是,如果我使用 docker 将我的应用程序与 UWSGI、daphne 和工作容器分开,则不会触发信号。 例如,我希望任何 celery worker (任务)触发信号并通过 websocket 发送更新。在我的多容器设置中,websocket 连接建立正常,网络工作正常,但没有触发该信号。

信号是如何定义的,您可以在 github 上查看.

我正在使用 django 1.9.12、python 2.7、docker 并在 debian 拉伸(stretch)上构建。

docker-compose.yml

  web:
build: .
ports: ["8001:80"]

daphne:
build: .
command: daphne -b 0.0.0.0 -p 8000 --access-log - -v 2 my_proj.asgi:channel_layer

ws_worker:
build: .
command: ./manage.py runworker -v 2

celery_worker:
build: .
command: /usr/local/bin/celery -A my_proj worker

nginx.conf
upstream django {
server unix:/home/docker/app.sock;
}

server {
listen 80;
server_name 127.0.0.1;
charset utf-8;
client_max_body_size 1000M;

location /static/ {
alias /home/docker/static/;
}

# proxy to other container
location /ws/ {
proxy_pass http://daphne:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}

location / {
uwsgi_pass django;
include /home/docker/uwsgi_params;
}

}

最佳答案

我的问题是信号没有加载,因为我在models.py之外的地方定义了绑定(bind)类。如果我在模型加载后加载它们 我的应用程序/config.py 它适用于多个容器

from django.apps import AppConfig as DefaultAppConfig

class AppConfig(DefaultAppConfig):
def ready(self):
# for websockets bindigns
from my_app.websockets.bindings_one import *
from my_app.websockets.bindings_two import *

关于python - Django 信号不适用于多容器设置中的 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47842896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com