文章目录
- 环境变量配置
- django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
- django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
环境变量配置
- 如果你有一个文件,比如我的是一个 google api 的鉴权文件
google_credential.json
那么 用下面的语句可以在本地打开这个文件, 并将内容写入 heroku 的环境变量,当然你的环境变量名字GS_CREDENTIALS
你自己指定
heroku config:set GS_CREDENTIALS="$(< ./google_credential.json)" -a <app_name>
django.core.exceptions.AppRegistryNotReady: Apps aren’t loaded yet.
- 一些可能导致 AppRegistryNotReady 错误的常见问题需要检查:
-
确保应用初始化顺序正确:在
INSTALLED_APPS
中,<your application name>
应用应该在"django.contrib.admin"
和其他内置应用之后列出。这可以帮助确保当您的自定义应用尝试访问模型或其他 Django 功能时,Django 已经完全初始化。 -
检查环境变量配置:确保所有在 Heroku 环境中所需的环境变量都已正确设置。这包括任何数据库 URL、密钥、或其他您的应用可能依赖的服务的凭证。
-
检查数据库配置:在 Heroku 上,通常会使用
Postgres
数据库而不是本地的SQLite
。确保DATABASES
配置适用于 Heroku 的数据库。例如,可以使用dj_database_url.config()
来从 Heroku 的DATABASE_URL
环境变量中获取数据库配置。 -
静态文件配置:在 Heroku 上部署时,静态文件的处理方式与本地开发不同。请确保
whitenoise.middleware.WhiteNoiseMiddleware
在settings
中部署正确,也确保静态文件路径和设置适合 Heroku 环境。 -
检查
ASGI/WSGI
配置:如果同时配置了 ASGI 和 WSGI。请确保在 Heroku 上也正确地配置了这些,特别是如果正在使用像Daphne
这样的 ASGI 服务器。 -
检查 Procfile:确保您的 Procfile 正确设置以启动 Django 应用。例如,如果使用
ASGI
,则应该有类似web: daphne <your app name>.asgi:application --port $PORT --bind 0.0.0.0
的内容。如果使用 docker 部署,则这一条可以忽略 -
运行迁移:在部署到 Heroku 之前,确保已经运行了所有的数据库迁移。
- 以上这些问题都没有解决,最后我通过查看项目的日志发现是我的
consumers.py
中定义了一些 websocket 功能,并且在构建 django 项目的时候, 在consumers.py
中出现了循环调用,并且与models.py
文件有关,于是,我将consumers.py
中对于models.py
文件中的引用放在了对应的函数中,即,不在批量import
包的头部引入models.py
的内容,而是啥时候用到啥时候调用,最终解决了这个问题。
2024-01-30T04:57:33.755630+00:00 app[web.1]: Traceback (most recent call last):
2024-01-30T04:57:33.755711+00:00 app[web.1]: File "/usr/local/bin/daphne", line 8, in <module>
2024-01-30T04:57:33.755764+00:00 app[web.1]: sys.exit(CommandLineInterface.entrypoint())
2024-01-30T04:57:33.755765+00:00 app[web.1]: File "/usr/local/lib/python3.9/site-packages/daphne/cli.py", line 170, in entrypoint
2024-01-30T04:57:33.755849+00:00 app[web.1]<