通过AWS Beanstalk在Prod中部署时,Django迁移问题

时间:2018-03-18 22:49:20

标签: django django-models migration elastic-beanstalk

在部署到多个环境时,我正在努力解决Django迁移问题。我有以下几个:

  • 使用sqlite3数据库在我的笔记本电脑上进行本地开发

  • 在AWS中测试(通过Beanstalk部署)连接到AWS RDS生产数据库

  • AWS中的产品(通过Beanstalk部署)连接到AWS RDS生产数据库。

我的工作流程一旦我在本地完成了我的开发,我就部署到Test实例,该实例应该在部署到Prod实例之前对prod数据库进行向后兼容的更改,在那里我运行我的测试。

在我的.gitignore中,我已经排除了所有迁移文件夹,就像我以前应用我在dev中创建的相同迁移一样,这会导致部署期间出现一些不一致和错误。我认为在部署时在test或prod服务器上重新创建迁移会更简洁。

在我的.ebextensions中,我有以下配置在部署应用程序时执行:

01_makemigration: command: "source /opt/python/run/venv/bin/activate && python manage.py makemigrations --noinput" leader_only: true 02_migrate: command: "source /opt/python/run/venv/bin/activate && python manage.py migrate --noinput" leader_only: true

但是,在对模型进行更改后部署到测试平台时,迁移似乎不会发生。我试图手动运行这些命令,但它告诉我所有内容都是最新的,并且不会应用任何迁移。

我还尝试使用以下序列“重新定位”迁移:

在数据库上:

> delete from django_migrations;

在应用程序上:

> rm -rf calc/migrations/

> source /opt/python/run/venv/bin/activate

> python manage.py migrate --fake

> python manage.py makemigrations calc

> python manage.py migrate --fake-initial

但它似乎也没有用。

是否有人能够建议在这种情况下应用迁移的正确方法是什么?我宁愿避免在测试环境(和prod数据库)上提交dev迁移并创建新的和干净的迁移,但我似乎没有找到正确的方法来做到这一点。

谢谢 问候 晏

1 个答案:

答案 0 :(得分:1)

您不得从git中排除迁移。它们是您的代码库的一部分,需要与您的应用程序一起部署。你不应该在prod中运行makemigrations,只能迁移。