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

Django部署Heroku后登录注册报错:django_site表不存在

解决Django部署到Heroku后登录报错"relation 'django_site' does not exist"的问题

嘿,我来帮你搞定这个头疼的问题!咱们一步步来分析和解决:

问题根源

这个报错本质是Heroku上的数据库里缺少django_site表,而django.contrib.sites这个内置应用默认是启用的,它依赖这个表来完成站点相关的功能(比如登录时的一些验证逻辑)。你之前遇到的问题,大概率是因为本地的数据库操作没同步到Heroku的远程数据库上。

具体解决方案

1. 检查并修正Settings配置

先确保你的settings.py里这两项配置是正确的:

  • 确认django.contrib.sites在INSTALLED_APPS列表中(Django默认会包含,但如果不小心删掉了要加回去)
  • 正确设置SITE_ID = 1(注意你之前试的SITE_ADD=1是无效的,正确的配置项是SITE_ID)

2. 在Heroku上执行数据库迁移

Heroku使用的是独立的PostgreSQL数据库(和你本地的db.sqlite3完全没关系),所以必须在远程数据库上执行迁移操作:

  • 打开终端,先登录Heroku CLI:heroku login
  • 直接远程执行迁移命令(替换成你的应用名称):
    heroku run python manage.py migrate --app your-heroku-app-name
    
    或者进入Heroku的bash环境执行:
    heroku run bash --app your-heroku-app-name
    # 进入后执行
    python manage.py migrate
    
    这个命令会把所有未执行的数据库迁移(包括django.contrib.sites的迁移)应用到Heroku的PostgreSQL数据库中,自动创建django_site表。

3. 排查额外注意点

  • 你之前删除db.sqlite3并配置PostgreSQL后本地有了django_site表,是因为本地执行了migrate,但Heroku的数据库是独立的,必须单独执行迁移
  • 至于bin目录下文件的shebang路径(#!/home/far/git/...),这个是本地的Python路径,Heroku会自动使用它的内置Python环境,所以这个和当前报错无关,不用纠结

总结

核心就是确保Heroku上的远程数据库执行了完整的迁移操作,因为Django的内置应用(比如sites)需要对应的数据库表来运行,本地的数据库变更不会自动同步到Heroku的远程数据库哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:58:52