Как я могу запустить свое приложение Django с оружием и дафной на героку? - PullRequest
0 голосов
/ 08 февраля 2020

Я пытаюсь сделать чат. Есть некоторые функции, которые работают с «оригиналом» Django (def index (запрос) и т. Д.), Но также есть функции, где мне нужно использовать веб-сокеты. Я установил каналы, чтобы сделать интерфейс веб-сокета. Итак, у меня есть две системы: межсетевые соединения Gunicorn с HTTP (S) и межсетевые соединения Daphna с интерфейсом WS (S). На своем локальном компьютере я установил все файлы (asgi.py, consumer.py, routing.py и settings.py) и набрал: python manage.py runserver - все работает. Но когда я развертываю его на героку, я получаю много ошибок.

Я попробовал все, но не нашел решения. Обратитесь за помощью.

Вот мои файлы:

chat / Procfile

web: daphne Chat.asgi:channel_layer --port $PORT
web2: gunicorn Chat.wsgi

chat / chat / asgi.py

import os
import channels.asgi

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Chat.settings')
channel_layer = channels.asgi.get_channel_layer()

чат / чат / routing.py

from channels.routing import route

channel_routing = {
    'websocket.connect': 'user_chating.consumers.ws_connect',
    'websocket.receive': 'user_chating.consumers.ws_message',
    'websocket.disconnect': 'user_chating.consumers.ws_disconnect',
    #'send_email': 'user_chating.consumers.send_email_consumer'
}

чат / чат / settings.py

...

# Application definition

INSTALLED_APPS = [
    'user_chating',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'channels',
]

CHANNEL_LAYERS = {
    'default': {
        'BACKEND': 'asgiref.inmemory.ChannelLayer',
        'ROUTING': 'Chat.routing.channel_routing',
    },
}
ASGI_APPLICATION = "Chat.routing.application"

MIDDLEWARE = [
    'whitenoise.middleware.WhiteNoiseMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'Chat.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR, 'templates'],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'Chat.wsgi.application'

...

chat / chat / wsgi.py


import os

from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Chat.settings')
application = get_wsgi_application()

chat / user_chatting / consumer.py

import json
import time

from django.core.mail import send_mail
from channels.channel import Group


def ws_connect(message):
    Group('chat').add(message.reply_channel)
    message.reply_channel.send({"accept": True})

def ws_message(message):
    Group('chat').send({'text': json.dumps({'message': message.content['text'],
                                            'sender': message.reply_channel.name})})

def ws_disconnect(message):
    Group('chat').discard(message.reply_channel)

Кто-нибудь может мне помочь, пожалуйста?

...