Какой правильный файл / требования к героку с django каналами? - PullRequest
1 голос
/ 01 мая 2020

tl; dr - django приложение каналов работает локально с runserver manage.py, но не на heroku.

Я новичок в django каналах - пытаюсь развернуть Очень базовое c django приложение, использующее каналы к героку Сначала я построил проект, используя стандартное django руководство по опросам , и применил его к героку. Затем я добавил в приложение чата, используя django канал учебник . Удалось запустить его нормально локально, используя docker для запуска сервера redis, как они предложили, и "python manage.py runserver".

Я застреваю, пытаясь развернуть это на heroku или запустить его локально, используя heroku local. Я уже добавил аддон redis в heroku и изменил settings.py, чтобы он указывал на переменную окружения REDIS_URL. Я также изменил свой шаблон, чтобы использовать wss, если это необходимо (я считаю, что это необходимо для heroku):

var ws_scheme = window.location.protocol == "https:" ? "wss" : "ws";
        var target = ws_scheme + '://'
        + window.location.host
        + '/ws/chat/'
        + roomName
        + '/';
        const chatSocket = new WebSocket(
          target
        );
...

Таким образом, я заключаю, что проблема в procfile. Я не уверен, какие инструкции есть. Используемый первоначальный учебник опросов:

web: gunicorn gettingstarted.wsgi --log-file -

Если я просто использую этот 'heroku local', он работает нормально, а развертывание работает нормально, но когда я пытаюсь отправить сообщение чата, оно ничего не делает и показывает 404 в консоли , Я знаю, что должен изменить это, чтобы использовать сервер asgi вместо gunicorn. нашел этот урок по развертыванию приложения с каналами на heroku, который использовал:

web: daphne chat.asgi:channel_layer --port $PORT --bind 0.0.0.0 -v2
worker: python manage.py runworker -v2

Я попробовал это, но вот где я застрял. Вот что я получаю, когда запускаю heroku local:

krishnas-air:python-getting-started Krishna$ heroku local
[OKAY] Loaded ENV .env File as KEY=VALUE Format
6:46:50 PM worker.1 |  Traceback (most recent call last):
6:46:50 PM worker.1 |    File "manage.py", line 8, in <module>
6:46:50 PM worker.1 |      from django.core.management import execute_from_command_line
6:46:50 PM worker.1 |  ImportError: No module named django.core.management
[DONE] Killing all processes with signal  SIGINT
6:46:50 PM worker.1 Exited with exit code null
6:46:50 PM web.1    |  Traceback (most recent call last):
6:46:50 PM web.1    |    File "/usr/local/bin/daphne", line 5, in <module>
6:46:50 PM web.1    |      from daphne.cli import CommandLineInterface
6:46:50 PM web.1    |    File "/usr/local/lib/python3.7/site-packages/daphne/cli.py", line 1, in <module>
6:46:50 PM web.1    |      import argparse
6:46:50 PM web.1    |    File "<frozen importlib._bootstrap>", line 983, in _find_and_load
6:46:50 PM web.1    |    File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
6:46:50 PM web.1    |    File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
6:46:50 PM web.1    |    File "<frozen importlib._bootstrap_external>", line 724, in exec_module
6:46:50 PM web.1    |    File "<frozen importlib._bootstrap_external>", line 857, in get_code
6:46:50 PM web.1    |    File "<frozen importlib._bootstrap_external>", line 525, in _compile_bytecode
6:46:50 PM web.1    |  KeyboardInterrupt
6:46:50 PM web.1    Exited with exit code null

Сообщение об ошибке импорта заставило меня подумать, что в файле require.txt что-то не хватает, поэтому я включил его и здесь для справки:

django
gunicorn
django-heroku
requests
channels
channels_redis
asgi_redis
asgiref
daphne
redis
gevent
gevent-websocket
greenlet

Спасибо за любую помощь!

...