Развертывание Django ASGI - вопрос о Procfile и Daphne

Я сделал простое приложение чата на Django, используя Daphne в качестве веб-сервера, Channel Layers с Redis и SQLite в качестве базы данных. Теперь я пытаюсь развернуть его на Heroku.

Весь каталог проекта выглядит следующим образом:

├───Chat Room Application
    └───chat_project
    |   ├───chat
    |   ├───chat_project
    |   ├───room
    |---Dockerfile
    |---Procfile
    |---requirements.txt


Sorry for the design, the tree command didn't print it the way I wanted.

Каталог Chat Room Application - это каталог , где был инициализирован git repo и где должен находиться Procfile. Внешняя директория chat_project была сгенерирована автоматически, Django. А внутренняя директория chat_project - это место, где находятся файлы settings.py и asgi.py. chat и room - это различные приложения Django.

Поскольку это ASGI-приложение, я использую следующую команду для запуска веб-сервера:

daphne chat_project.asgi:application

Итак, Procfile выглядит следующим образом:

web: daphne chat_project.asgi:application

Моя проблема в том, что в моей текущей конфигурации Procfile не видит внутренний каталог chat_project.

Когда я развертываю его, используя git push heroku main, я получаю:

=== web (Free): daphne chat_project.asgi:application (1)

web.1: crashed 2022/11/15 22:12:24 +0200 (~ 6s ago)

Когда я смотрю на журнал, я вижу:

ModuleNotFoundError: Нет модуля с именем 'chat_project.asgi'

Что я придумал, так это добавить команду cd внутри Procfile :

web: cd /chat_project && daphne chat_project.asgi:application, но это не сработало.

Я попробовал добавить тег --root-path в команду:

web: daphne --root-path=/chat_project chat_project.asgi:application, но это также ничего не дало.

Я также пробовал поместить Procfile внутрь внешнего каталога chat_project, но тогда я получаю следующий вывод:

Профиль объявляет типы -> none

Конечно, есть что-то, чего я не совсем понимаю, но я не уверен, что именно. Надеюсь, я предоставил достаточно информации, но, пожалуйста, дайте мне знать, если я упустил что-то важное. Я совсем новичок в веб-разработке, поэтому, пожалуйста, не будьте слишком суровы при ответе. Заранее спасибо.

Вернуться на верх