#python #django #heroku #django-channels
#питон #джанго #героку #джанго-каналы
Вопрос:
Я новичок в каналах и перепробовал все возможные решения, чтобы это работало, но мое приложение для чата не работает на heroku, но отлично работает в локальной среде. Мои другие приложения для блогов и историй отлично работают как на локальном, так и на heroku, я столкнулся с этой проблемой с помощью приложения «Просто чат». Вот это settings.py файл
ASGI_APPLICATION = 'core.routing.application' DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' CHANNEL_LAYERS = { "default": { "BACKEND": "channels.layers.InMemoryChannelLayer", # "CONFIG": { # "hosts": [('127.0.0.1', 6379)] # } } }
routing.py
from django.urls import re_path from . import consumers websocket_urlpatterns = [ re_path(r'ws/chat/(?Plt;room_namegt;w )/
asgi.py
import os from django.core.asgi import get_asgi_application os.environ.setdefault('DJANGO_SETTINGS_MODULE','core.settings') application = get_asgi_application()
consumers.py
import json
из channels.generic.websocket импортируйте AsyncWebsocketConsumer
пользователь класса ChatRoomConsumer(AsyncWebsocketConsumer): асинхронное подключение(self): self.room_name = self.область действия['url_route']['kwargs']['имя комнаты'] self.room_group_name = 'чат % s' % self.room_name
await self.channel_layer.group_add( self.room_group_name, self.channel_name ) await self.accept() async def disconnect(self, close_code): await self.channel_layer.group_discard( self.room_group_name, self.channel_name ) async def receive(self, text_data): text_data_json = json.loads(text_data) message = text_data_json['message'] username = text_data_json['username'] await self.channel_layer.group_send( self.room_group_name, { 'type': 'chatroom_message', 'message': message, 'username': username, } ) async def chatroom_message(self, event): message = event['message'] username = event['username'] await self.send(text_data=json.dumps({ 'message': message, 'username': username, })) pass
и мой файл Procfile
web: gunicorn core.wsgi:application --log-file - --log-level debug web: daphne core.asgi:application --port $PORT --bind 0.0.0.0 -v2 worker: python manage.py runworker channels --settings=core.settings -v2 python manage.py collectstatic --noinput
manage.py мигрировать
asgi.py
, consumers.ChatRoomConsumer.as_asgi()), ]
consumers.py
из channels.generic.websocket импортируйте AsyncWebsocketConsumer
пользователь класса ChatRoomConsumer(AsyncWebsocketConsumer): асинхронное подключение(self): self.room_name = self.область действия[‘url_route’][‘kwargs’][‘имя комнаты’] self.room_group_name = ‘чат % s’ % self.room_name
и мой файл Procfile
manage.py мигрировать