Django.core.exceptions.AppRegistryNotReady: Приложения еще не загружены, на каналах django
Мое приложение работает как по HTTP, так и по Websocket с использованием каналов django. Я готовлюсь к развертыванию, но когда я запускаю daphne MarketPlace.asgi:application
, оно выдает эту ошибку. Я не уверен, что у меня был круговой импорт, потому что моя модель User много раз использовалась в других моделях из других приложений.
Каждый, кто имеет представление о том, как решить эту ошибку? Пожалуйста, помогите.
Помните, что служба Daphne на сервере запускает несколько экземпляров или Python-приложений асинхронно для нашего веб-сервера и веб-сокетов. Он работает между кодом Apache и кодом сервера Django, перенаправляя веб-трафик туда, куда нужно.
В отличие от других систем, где вы можете подключиться к вебсокету другого сервера, мы подключаемся к нашему собственному серверу.
После развертывания на рабочем сервере необходимо перенаправить трафик на приложения, которые работают локально относительно нашего сервера. Вместо подключения через http
и ws
, нам нужно подключиться через https
и wss
. Решение состоит в том, чтобы перенаправить весь wss
трафик на локальный порт, на котором запущен веб-сокет ws
.
Рассмотрим следующую конфигурацию сервера Apache:
...
RewriteEngine on
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC,OR]
RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
RewriteRule .* ws://127.0.0.1:8001%{REQUEST_URI} [P,QSA,L]
ProxyPass /wss/ wss://127.0.0.1:8001/
ProxyPassReverse /wss/ wss://127.0.0.1:8001/
...
SSLEngine on
SSLCertificateFile /etc/ssl/certificate.crt
SSLCertificateKeyFile /etc/ssl/private/private.key
SSLCertificateChainFile /etc/ssl/ca_bundle.crt
...
Затем вам нужно запустить сервер, поэтому на уровне производства вам понадобится контейнер Docker или какая-либо методология для поддержания кода в рабочем состоянии. Команда для запуска на живом сервере немного отличается, ваш веб-трафик открыт на порту 443, на котором конфигурация вашего сервера Apache должна начать принимать трафик.
daphne -b 0.0.0.0 -p 8001 django_project.asgi:application // Local Development Level
daphne -e ssl:443:privateKey=key.pem:certKey=crt.pem django_project.asgi:application // Production Level
Это должно решить вашу проблему, если вы внимательно следите за тем, что делаете в конфигурации своего сервера. Убедитесь, что ваш сайт запущен и работает на домене, прежде чем использовать Daphne, если у вас возникли проблемы с направлением трафика на порт 443.