You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django在Heroku执行migrate成功但创建超级用户提示无表如何解决

Heroku部署Django migrate成功但创建超级用户提示表不存在的解决方案

问题根因

从报错栈可明确判断:你执行createsuperuser时Django实际加载的是SQLite数据库驱动,而非你配置的PostgreSQL。
原因是Heroku的dyno文件系统是临时存储,你执行migrate时生成的SQLite数据库文件仅存在于当时运行migrate的dyno中,新启动的执行createsuperuser的dyno没有这个文件,所以提示表不存在。

可行解决方案

  • 修正配置加载入口
    首先确认你项目的wsgi.py、asgi.py文件中,DJANGO_SETTINGS_MODULE的取值指向你的生产配置文件,比如你的生产配置是settings/prod.py,对应配置应为:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "你的项目名.settings.prod")

如果指向的是基础settings.py,Django会默认使用基础配置中的SQLite数据库,不会加载你写的PostgreSQL配置。

  • 删除无效的env文件读取逻辑
    Heroku的配置变量直接存在系统环境中,不需要读取本地.env文件,你配置中的environ.Env.read_env()会尝试读取不存在的本地文件,导致环境变量读取失败, fallback到基础配置的SQLite,直接删除这行即可,保留env = environ.Env()即可。
  • 验证数据库配置是否生效
    执行命令进入Heroku的Django shell:
    heroku run -a 你的app名称 python manage.py shell
    在shell中执行以下代码打印实际生效的数据库配置:
from django.conf import settings
print(settings.DATABASES['default'])

如果输出中的ENGINE值为django.db.backends.postgresql则配置正确,若为django.db.backends.sqlite3则说明配置仍未加载,需回头检查前两步。

  • 确认DATABASE_URL环境变量存在
    执行命令查看Heroku的配置变量:
    heroku config -a 你的app名称
    确认输出中存在DATABASE_URL变量,值为postgresql://开头的字符串,若不存在可重新安装Heroku PostgreSQL插件自动生成该变量。
  • 重新执行迁移与创建超级用户
    配置修正后推送代码到Heroku,依次执行:
heroku run -a 你的app名称 python manage.py migrate
heroku run -a 你的app名称 python manage.py createsuperuser

即可正常创建超级用户。

内容的提问来源于stack exchange,提问作者Unviray

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 08:57:02