1

我正在开发一个使用Django和Elasticbeanstalk的小型Web应用程序。 我创建了一个包含两个环境(分段和生产)的EB应用程序,创建了一个RDS实例并将其分配给我的EB环境。Elasticbeanstalk /多个数据库的Django迁移过程

对于开发,我使用本地数据库,因为部署到AWS需要相当长的时间。

但是,我遇到了迁移问题。由于我每隔几分钟在本地进行开发和测试,因此我倾向于在本地和两种环境中进行不同的迁移。因此,一旦我将应用程序的当前版本部署到特定环境中,“manage.py migrate”在大多数情况下都会失败,因为表已经存在或者即使它们应该存在也不存在(因为另一个环境已经创建了表)。

所以我想知道如何使用一些常见的,可能没有反映相同的结构无时无刻一些专有的数据库实例进行开发,分期和生产多种环境时,处理迁移过程?

我应该排除从代码库迁移文件和EB部署和运行makemigrations &每次迁移部署后?我不应该使用.ebextensions自动运行迁移,并通过其中一个实例手动应用所有迁移?

什么是使用具有在不同环境下不同的数据库实例相同的Django应用程序的推荐的方法?

回答

1

似乎您可能在某个时间点删除了表或迁移。

当您运行makemigrations,Django的创建migratins,当你运行迁移,它会创建取其在设置文件中指定的数据库。

的一件事是,如果你不断创造迁移和不特定的数据库运行它,它是绝对的罚款。无论何时切换到databsse并运行迁移,它都会处理它,因为每个数据库都将存储直到现在在django-migrations表中运行的迁移点,并且只会开始运行下一次迁移。

解决你的问题,你可以删除所有数据库和迁移文件,并重新开始,你也许现在测试。事情会很好,直到你删除任何服务器中的迁移或数据库。

如果你有宝贵的数据,你应该进入迁移文件和表格来分析和管理事情。

+0

但这正是我的意思。出于开发和测试的目的,我可能会在某个时候删除一个表格(或者做其他的事情)。如果我将迁移文件夹部署到Elastic Beanstalk环境,我还必须将相同的事务应用于其他数据库以避免错误。忽略迁移文件并让每个系统保持其自己的迁移会有伤害吗? – wuser92

+0

您可以删除表格,但不要直接在数据库上执行操作。通过django ORM来完成。假设你想删除一个表格,你应该删除该模型并进行迁移。然后,当您在每台服务器上单独迁移它时,您都不会遇到任何问题。 – sprksh

+0

我没有使用弹性豆茎。但是,是的,这是正常的事情。您会忽略迁移文件并在每台服务器上进行单独的迁移(开发,生产,测试)。通常情况下,如果你使用git,你可以将migrations /放入.gitignore中。因此迁移文件将分别在每台服务器上生成。 – sprksh