Приложение Django channels chat async не работает на heroku, но отлично работает в локальной среде и не встречает ошибок в логах heroku
Я новичок в каналах и я перепробовал все возможные решения, чтобы заставить его работать, но мое приложение чата не работает на 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/(?P<room_name>\w+)/$',
consumers.ChatRoomConsumer.as_asgi()),
]
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
from channels.generic.websocket import AsyncWebsocketConsumer
class ChatRoomConsumer(AsyncWebsocketConsumer): async def connect(self): self.room_name = self.scope['url_route']['kwargs']['room_name']. self.room_group_name = 'chat_%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 migrate