在部署到多个环境时,我正在努力解决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迁移并创建新的和干净的迁移,但我似乎没有找到正确的方法来做到这一点。
谢谢 问候 晏
答案 0 :(得分:1)
您不得从git中排除迁移。它们是您的代码库的一部分,需要与您的应用程序一起部署。你不应该在prod中运行makemigrations,只能迁移。