本地 Django 部署 Heroku的时候某个 / 某些数据库显示总是无法创建成功 relation “nnsh_backend_new_userinfo“ does not exist LINE

文章目录

  • 情景
  • 原因
  • 操作
    • 手动
    • 自动

情景

  • 假设你有一个项目 A

  • 你之前部署了项目 A,里面包含了两个数据库的表 table1 和 table2,他们都顺利部署

  • 然后你相加一些功能,于是又创建了一张表 table3

  • 于是再部署的时候发现 table3 即使执行了 makemigrations 和 migrate 命令也无法创建成功,但是在 django 的 admin 界面却能够看到 table3,就像下面这样:
    本地 Django 部署 Heroku的时候某个 / 某些数据库显示总是无法创建成功 relation “nnsh_backend_new_userinfo“ does not exist LINE_第1张图片

  • 这里的 userinfo 就是我说的 table3,在 admin 界面能看到,但是你就是无法操作

  • 报错的信息如下:

ProgrammingError at /admin/nnsh_backend_new/userinfo/
relation "nnsh_backend_new_userinfo" does not exist
LINE 1: SELECT COUNT(*) AS "__count" FROM "nnsh_backend_new_userinfo...
                                          ^
Request Method:	GET
Request URL:	http://nus-nnsh-backend-new-1fec143342b2.herokuapp.com/admin/nnsh_backend_new/userinfo/
Django Version:	4.0.1
Exception Type:	ProgrammingError
Exception Value:	
relation "nnsh_backend_new_userinfo" does not exist
LINE 1: SELECT COUNT(*) AS "__count" FROM "nnsh_backend_new_userinfo...
                                          ^
Exception Location:	/app/.heroku/python/lib/python3.9/site-packages/django/db/backends/utils.py, line 85, in _execute
Python Executable:	/app/.heroku/python/bin/python
Python Version:	3.9.16
Python Path:	
['.',
 '/app/.heroku/python/bin',
 '/app',
 '/app/.heroku/python/lib/python39.zip',
 '/app/.heroku/python/lib/python3.9',
 '/app/.heroku/python/lib/python3.9/lib-dynload',
 '/app/.heroku/python/lib/python3.9/site-packages']
Server time:	Sun, 16 Jul 2023 09:51:46 +0000

原因

  • 有一些数据库的冲突发生了,这些冲突可能如下,但远不止下面的情况:

    • 你现在改完的版本中某个表多了一些字段,
    • 但是在你已有的信息中没有这些字段,这其实就会造成冲突,这样的数据迁移结果会失败
  • 一个最粗暴的方法,也是我采用的方法(因为我的数据还在测试阶段,所以不重要),就是直接删除 Heroku 上的项目数据库,然后重新 makemigrations 和 migrate

操作

在你的本地terminal:

  • 登录 heroku 远程的账号:

    heroku login
    
  • 重置项目数据库:

    heroku pg:reset DATABASE_URL --confirm YOUR_APP_NAME
    
    • 如果你的项目只有一个数据库,那么这里的 DATABASE_URL 就保持不变即可,如果有多个数据库,你需要在这里确切地指定 DATABASE_URL 是什么
    • YOUR_APP_NAME 一定要换成自己的 Heroku 项目名称
  • 接下来 手动 或者在 Procfile 中设置 迁移操作:

手动

heroku run python manage.py makemigrations YOUR_PROJECT_NAME
heroku run python manage.py migrate 
  • 这里的 YOUR_PROJECT_NAME 注意不是上面的 YOUR_APP_NAME;这个是你本地项目文件夹的名称

自动

  • 在 Procfile 文件中的第一行写入
release: python manage.py makemigrations YOUR_PROJECT_NAME && python manage.py migrate 
  • 然后重新 git push 你的 heroku 项目,就会完成迁移的

你可能感兴趣的:(前后端开发,数据库,django,heroku,部署)