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的bash环境执行:heroku run python manage.py migrate --app your-heroku-app-name
这个命令会把所有未执行的数据库迁移(包括heroku run bash --app your-heroku-app-name # 进入后执行 python manage.py migratedjango.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
相关产品推荐
相关产品推荐

