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