django heroku 部署问题汇总

文章目录

  • 环境变量配置
  • 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 错误的常见问题需要检查:
  1. 确保应用初始化顺序正确:在 INSTALLED_APPS 中, 应用应该在 "django.contrib.admin" 和其他内置应用之后列出。这可以帮助确保当您的自定义应用尝试访问模型或其他 Django 功能时,Django 已经完全初始化。

  2. 检查环境变量配置:确保所有在 Heroku 环境中所需的环境变量都已正确设置。这包括任何数据库 URL、密钥、或其他您的应用可能依赖的服务的凭证。

  3. 检查数据库配置:在 Heroku 上,通常会使用 Postgres 数据库而不是本地的 SQLite。确保 DATABASES 配置适用于 Heroku 的数据库。例如,可以使用 dj_database_url.config() 来从 Heroku 的 DATABASE_URL 环境变量中获取数据库配置。

  4. 静态文件配置:在 Heroku 上部署时,静态文件的处理方式与本地开发不同。请确保whitenoise.middleware.WhiteNoiseMiddlewaresettings 中部署正确,也确保静态文件路径和设置适合 Heroku 环境。

  5. 检查 ASGI/WSGI 配置:如果同时配置了 ASGI 和 WSGI。请确保在 Heroku 上也正确地配置了这些,特别是如果正在使用像 Daphne 这样的 ASGI 服务器。

  6. 检查 Procfile:确保您的 Procfile 正确设置以启动 Django 应用。例如,如果使用 ASGI,则应该有类似 web: daphne .asgi:application --port $PORT --bind 0.0.0.0 的内容。如果使用 docker 部署,则这一条可以忽略

  7. 运行迁移:在部署到 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 "", line 1030, in _gcd_import
2024-01-30T04:57:33.756172+00:00 app[web.1]: File "", line 1007, in _find_and_load
2024-01-30T04:57:33.756202+00:00 app[web.1]: File "", line 986, in _find_and_load_unlocked
2024-01-30T04:57:33.756231+00:00 app[web.1]: File "", line 680, in _load_unlocked
2024-01-30T04:57:33.756261+00:00 app[web.1]: File "", line 850, in exec_module
2024-01-30T04:57:33.756322+00:00 app[web.1]: File "", 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

你可能感兴趣的:(django,数据库,sqlite)