Ошибка во время рукопожатия Websocket с кодом ошибки 500 при использовании Daphne на Heroku - PullRequest
1 голос
/ 30 января 2020

Итак, я попытался развернуть мое docker django приложение чата на heroku. Ранее я запускал приложение с помощью команды runserver, но теперь я переключаюсь на daphne, поскольку мне нужно использовать websocket, но я больше не могу использовать runserver для подключения к веб-серверу. После развертывания, когда я получаю доступ к странице приложения, которая показывает окно чата, эта ошибка возникает

WebSocket connection to 'wss://xxx.herokuapp.com/ws/chat/room/' failed: Error during WebSocket handshake: Unexpected response code: 500

(ххх - фактически URL моего приложения)

Вот часть моего js кода

<script>
    var roomName = "{{ room_name|escapejs }}";
    var wsStart = 'ws://';
    if (window.location.protocol === 'https:') {
                wsStart = 'wss://';
       }
    var chatSocket = new WebSocket(
        wsStart + window.location.host +
        '/ws/chat/' + roomName + '/');

    chatSocket.onmessage = function(e) {
        var data = JSON.parse(e.data);
        var message = data['message'];
        document.querySelector('#chat-log').value += (message + '\n');
    };

ws не работала (сообщение об ошибке Django может использовать только ASGI, а не websocket), поэтому я перешел на wss (согласно другому сообщению в stackoverflow это из-за соображений безопасности ), которая вывела другую ошибку go, но все еще не может подключиться к веб-сокету

Это моя команда запуска: daphne -p $PORT --bind 0.0.0.0 -v2 test_project.asgi:application

РЕДАКТИРОВАТЬ: если я не использую wss ( просто используйте вместо этого ws) это сообщение об ошибке в js console

The page at 'https://xxx/chat/m/' was loaded over HTTPS, but attempted to connect to the insecure WebSocket endpoint 'ws://xxx/ws/chat/room/'. This request has been blocked; this endpoint must be available over WSS.

Чрезвычайно признателен за любую помощь или идеи о том, что пошло не так. Большое вам спасибо!

1 Ответ

0 голосов
/ 31 января 2020

Оказывается, это не имеет никакого отношения к Дафни или моему js коду, который не работает. Я не подключался к Heroku-Redis в то время и, следовательно, не запускал Redis. Настроил REDISTOGO_URL с

heroku config --app  <appname> | grep REDISTOGO_URL

, изменил хост в channel_layer с "hosts": ('redis', 6379), (что-то похожее) на "hosts": [os.environ.get('REDISTOGO_URL',('redis', 6379))], что позволило мне подключиться к герою redis.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...