文章目录
- 环境变量配置
- 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]: cls().run(sys.argv[1:])
2024-01-30T04:57:33.755850+00:00 app[web.1]: File "/usr/local/lib/python3.9/site-packages/daphne/cli.py", line 232, in run
2024-01-30T04:57:33.755910+00:00 app[web.1]: application = import_by_path(args.application)
2024-01-30T04:57:33.755920+00:00 app[web.1]: File "/usr/local/lib/python3.9/site-packages/daphne/utils.py", line 12, in import_by_path
2024-01-30T04:57:33.755982+00:00 app[web.1]: target = importlib.import_module(module_path)
2024-01-30T04:57:33.755983+00:00 app[web.1]: File "/usr/local/lib/python3.9/importlib/__init__.py", line 127, in import_module
2024-01-30T04:57:33.756066+00:00 app[web.1]: return _bootstrap._gcd_import(name[level:], package, level)
2024-01-30T04:57:33.756067+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
2024-01-30T04:57:33.756172+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
2024-01-30T04:57:33.756202+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
2024-01-30T04:57:33.756231+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
2024-01-30T04:57:33.756261+00:00 app[web.1]: File "<frozen importlib._bootstrap_external>", line 850, in exec_module
2024-01-30T04:57:33.756322+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
2024-01-30T04:57:33.756351+00:00 app[web.1]: File "/app/./validation_backend/asgi.py", line 23, in <module>
2024-01-30T04:57:33.756423+00:00 app[web.1]: import validation_backend.routing
2024-01-30T04:57:33.756424+00:00 app[web.1]: File "/app/./validation_backend/routing.py", line 8, in <module>
2024-01-30T04:57:33.756520+00:00 app[web.1]: from . import consumers
2024-01-30T04:57:33.756520+00:00 app[web.1]: File "/app/./validation_backend/consumers.py", line 23, in <module>
2024-01-30T04:57:33.756622+00:00 app[web.1]: from validation_backend.models import Messages, Reminder
2024-01-30T04:57:33.756622+00:00 app[web.1]: File "/app/./validation_backend/models.py", line 18, in <module>
2024-01-30T04:57:33.756725+00:00 app[web.1]: class UserAction(models.Model):
2024-01-30T04:57:33.756725+00:00 app[web.1]: File "/usr/local/lib/python3.9/site-packages/django/db/models/base.py", line 108, in __new__
2024-01-30T04:57:33.756818+00:00 app[web.1]: app_config = apps.get_containing_app_config(module)
2024-01-30T04:57:33.756819+00:00 app[web.1]: File "/usr/local/lib/python3.9/site-packages/django/apps/registry.py", line 253, in get_containing_app_config
2024-01-30T04:57:33.756955+00:00 app[web.1]: self.check_apps_ready()
2024-01-30T04:57:33.756955+00:00 app[web.1]: File "/usr/local/lib/python3.9/site-packages/django/apps/registry.py", line 136, in check_apps_ready
2024-01-30T04:57:33.757016+00:00 app[web.1]: raise AppRegistryNotReady("Apps aren't loaded yet.")
2024-01-30T04:57:33.757042+00:00 app[web.1]: django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
2024-01-30T04:57:33.951201+00:00 heroku[web.1]: State changed from starting to crashed
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.
- 解决方案,通过 heroku cli,对 heroku 进行指定:
heroku config:set DJANGO_SETTINGS_MODULE=<your django app name>.settings