Django-channels: страница не найдена
Я пытаюсь установить django-channels
.
Я сделал все в соответствии с инструкциями, но когда я пытаюсь подключиться, я получаю 404 error - page not found
.
Я делаю запрос с локального хоста на сервер dev.
config/base.py
INSTALLED_APPS = [
"grappelli",
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"adminsortable2",
"channels",
"corsheaders",
"django_filters",
"django_multilanguage_content",
"django_otp",
"django_otp.plugins.otp_totp",
"drf_yasg",
"notifications",
"rest_framework",
"rest_registration",
"storages",
"vv.announcements.apps.AnnouncementsConfig",
"vv.core.apps.CoreConfig",
"vv.discussions.apps.DiscussionsConfig",
"vv.manage_categories.apps.ManageCategoriesConfig",
"vv.messaging.apps.MessagingConfig",
"vv.users.apps.UsersConfig",
"vv.vital_notif.apps.VitalNotifConfig",
]
ASGI_APPLICATION = "config.asgi.application"
CHANNEL_LAYERS = {
'default': {
'BACKEND': 'channels_redis.core.RedisChannelLayer',
'CONFIG': {
"hosts": [(env("REDIS_HOST"), 6379)],
},
},
}
config/asgi.py
import os
import sys
import django
from django.core.asgi import get_asgi_application
app_path = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), os.pardir))
sys.path.append(os.path.join(app_path, "vv"))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.base")
django.setup()
django_asgi_app = get_asgi_application()
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
from config.routing import websocket_urlpatterns
application = ProtocolTypeRouter({
"http": django_asgi_app,
"websocket": URLRouter(websocket_urlpatterns),
})
routing.py
from django.urls import path
from vv.messaging.consumers import MarkAsReadConsumer
websocket_urlpatterns = (
path("ws/mark/", MarkAsReadConsumer.as_asgi()),
)
runner.sh
#!/bin/sh
daphne -b 0.0.0.0 -p 8000 config.asgi:application -v2
python manage.py runworker -v2
client.js
let socket = new WebSocket("ws://<ip>/ws/mark/");
docker-compose.yml
version: "3.7"
x-env_file: &env_file
env_file:
- ./.env
services:
nginx:
build: ./nginx
container_name: vv-fix-nginx
ports:
- "5555:80"
depends_on:
- backend
networks:
- vv-fix-network
redis-vv:
image: redis:alpine
container_name: vv-fix-redis
volumes:
- vv_fix_redis_volume:/var/lib/redis/data/
ports:
- "6300:6379"
networks:
- vv-fix-network
backend:
<<: *env_file
container_name: vv-fix-backend
build:
context: .
depends_on:
- db
- redis-vv
command: /bin/sh -c "/boot.sh"
volumes:
- .:/app
networks:
- vv-fix-network
volumes:
vv_fix_db_volume:
vv_fix_redis_volume:
networks:
vv-fix-network
В файле .env
у меня есть REDIS_HOST=redis-vv
nginx.conf
events {}
http {
client_max_body_size 25M;
server {
listen 80;
listen [::]:80;
access_log /var/log/nginx/reverse-access.log;
error_log /var/log/nginx/reverse-error.log;
location /ws/ {
proxy_pass http://vv-fix-backend:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
}
location / {
proxy_pass http://vv-fix-backend:8000;
}
}
}
logs.txt
Я пробовал это с uvicorn
. Не эффект...
Я использую
Python 3.8
Django 2.2
channels-redis 3.3.0
каналы 3.0.4
redis 3.5.3
Измените местоположение nginx.conf
на
location / {
proxy_pass http://vv-fix-backend:8010;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
}