Django AWS Deploy:部署后未创建新的数据库表

Posted

技术标签:

【中文标题】Django AWS Deploy:部署后未创建新的数据库表【英文标题】:Django AWS Deploy: After deployment new Database Table was not created 【发布时间】:2018-02-24 17:39:01 【问题描述】:

我最近对在 PostgreSQL 数据库上创建数据库表的 models.py 文件进行了一些更改。

在本地开发系统上一切正常。我将更改推送到 GitHub,然后部署到我的测试 AWS EC2 Linux 系统。部署没有错误,所有文件都反映了我在开发系统上的内容。

唯一的问题是部署后没有创建数据库表。如果我在测试 AWS EC2 上运行 makemigrations,它只会声明没有任何更改。创建反映我的models.py 的新数据库表的最佳方法是什么?

作为参考,这是我的部署脚本:

#!/bin/bash
source venv/bin/activate
git pull
pip install -r requirements.txt
./manage.py migrate
./manage.py collectstatic --no-input
initctl restart gunicorn

【问题讨论】:

我遇到了这个问题。必须将表的权限授予我们正在使用的 db 用户。但是迁移的表现就像它正在工作一样。 @Chris 是的,它们出现在测试环境中。它们按顺序排列并包含更改。 @KevinHirst 我正在运行 linux AWS EC2,数据库在 RDS 上。首先,这已经奏效了,但我将如何尝试您的建议? 必须以某种方式通过 SQL 授予访问权限。就像“GRANT ALL ON public.table_name to user”——在一种情况下,我们必须使用 psql 工具在 django_migrations 表上执行此操作。 【参考方案1】:

问题是由于旧的迁移文件未正确应用而发生的。运行python manage.py showmigrations 是一个命令,它显示哪些迁移文件已应用,哪些未应用。对我来说,有 8 个迁移文件不适用。为了解决这个问题,我从数据库中的 django-migrations 表中删除了最后一次已知的迁移。然后我重新运行python manage.py migrate,这会将所有迁移应用到当前迁移,然后创建数据库条目。然后,我从我的 GitHub 存储库进行部署,以确保应用损坏的迁移文件后的所有更改。这解决了我的问题,希望能帮助下一个遇到此类迁移问题的人。

【讨论】:

以上是关于Django AWS Deploy:部署后未创建新的数据库表的主要内容,如果未能解决你的问题,请参考以下文章

Django - 迁移后未创建表

我在 aws 中使用“eb deploy”进行部署,但出现以下错误

在 AWS Ubuntu EC2 上部署 Django 时缺少模块

AWS Elastic Beanstalk 上禁止使用 Django 403

AWS EB Deploy 在部署后显示缺少 Dockerrun.aws.json

AWS CodeArtifact:mvn deploy:deploy-file 无法部署工件:无法传输工件 401 Unauthorized