Не могу подключиться к виртуальному серверу Django Channels на Ubuntu.

Вопрос или проблема

Я хочу развернуть Django каналы с gunicorn и nginx: это мой код:

gunicorn.service:

[Unit]
Description=Экземпляр Gunicorn для обслуживания mysite
After=network.target

[Service]
User=root
Group=www-data
WorkingDirectory=/root/mysite
ExecStart=/root/apiKomarket/venv/bin/daphne -u /run/mysite.sock 
   mysite.asgi:application -b 127.0.0.1 -p 8002

[Install]
WantedBy=multi-user.target

nginx:

server {
    listen 80;
    server_name komarket.net;

    location / {
        proxy_pass http://unix:/run/mysite.sock;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

asgi.py:

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
application = ProtocolTypeRouter({
    "http": get_asgi_application(),
    "websocket": AuthMiddlewareStack(
        URLRouter(websocket_urlpatterns)),
})

router.py:

websocket_urlpatterns = [
    path("ws/order/", mycunsomer.as_asgi()),
]

consumer.py:

class mycunsomer(WebsocketConsumer):
    def connect(self):
        self.accept()
    def disconnect(self, close_code):
        pass

    def receive(self, text_data=None, bytes_data=None):
        pass

home.html:

const chatSocket = new WebSocket(
        'ws://'
        + window.location.host
        + '/ws/order/'
    );

но этот код вызывает эту ошибку:
Трассировка (последний вызов последним):
Файл “/root/apiKomarket/venv/lib/python3.10/site-packages/django/template/base.py”, строка 906, в _resolve_lookup
raise VariableDoesNotExist(
django.template.base.VariableDoesNotExist: Не удалось найти ключ [name] в <URLResolver <модуль ‘API.urls’ из ‘/root/apiKomarket/./API/urls.py’> (None:None) ‘apis/’>
Не найдено: /favicon.ico

пожалуйста, кто-нибудь, помогите мне

Ответ или решение

Чтобы помочь вам устранить ошибку, возникающую при подключении к серверу Django Channels, давайте рассмотрим возможные причины проблемы и пути их решения.

1. Проверка конфигурации Gunicorn

Согласно вашему файлу gunicorn.service, вы используете Daphne как ASGI-сервер для вашего приложения. Обратите внимание на следующие моменты:

  • Убедитесь, что путь к Daphne указан правильно:

    /root/apiKomarket/venv/bin/daphne -u /run/mysite.sock mysite.asgi:application -b 127.0.0.1 -p 8002
  • Убедитесь, что файл сокета /run/mysite.sock действительно создается и доступен для чтения. Если сокет не создается, проверьте логи как Gunicorn, так и Daphne.

2. Настройка Nginx

Ваш конфигурационный файл Nginx также необходимо проверить. Убедитесь, что он правильно настроен для работы с сокетом:

  • Проверьте, что Nginx имеет доступ к /run/mysite.sock. Возможно, вам потребуется установить права на сокет:

    sudo chown www-data:www-data /run/mysite.sock
  • Также убедитесь, что конфигурация сервера Nginx действительно загружается:

    sudo nginx -t

    Если есть ошибки, исправьте их перед перезапуском Nginx.

3. Обработка WebSocket соединений

Ваш home.html код создает WebSocket соединение. Важно убедиться, что путь ws/order/ правильно ссылается на ваш websocket_urlpatterns.

4. Ошибка с объектом шаблона

Ошибка, которую вы получаете:

django.template.base.VariableDoesNotExist: Failed lookup for key [name]

говорит о том, что проблема может быть связана с доступом к переменным в шаблоне. Вам стоит проверить, правильно ли вы передаете контекст в ваш шаблон. Убедитесь, что name (или переменная, который вызывает это) существует в контексте, когда шаблон рендерится:

  • Если вы используете render или render_to_response, убедитесь, что вы передали все необходимые аргументы.

5. Проверка маршрутизации в Django

Проверьте, правильно ли установлено приложение Django для работы с WebSocket и маршрутизацией:

  • В файле asgi.py проверьте, действительно ли websocket_urlpatterns импортируется корректно и что путь ws/order/ правильно определен.

  • Проверьте настройки URL вашего Django проекта и убедитесь, что вы не пропустили маршрутизацию для WebSocket в urls.py.

6. Логи и отладка

Для более глубокого анализа проблемы вы можете включить отладку в вашем Django проекте:

  • Убедитесь, что уровень отладки (DEBUG) установлен в True в файле настроек settings.py. Это поможет вам получить более детализированную информацию о возникших ошибках.

  • Также полезно проверять логи Gunicorn и Nginx на предмет дополнительных сообщений об ошибках.

Заключение

Следуя этим шагам, вы сможете обнаружить и исправить проблему, с которой столкнулись при развёртывании Django Channels. Если у вас остались дополнительные вопросы или проблемы, не стесняйтесь задавать их, и мы постараемся помочь вам более детально.

Оцените материал
Добавить комментарий

Капча загружается...