必读
Django 迁移:
https://docs.djangoproject.com/en/1.8/ref/django-admin/#makemigrations-app-label
假设您使用的是 South:
https://docs.djangoproject.com/en/1.8/topics/migrations/#upgrading-from-south
开始
首先转储您的本地数据库,我更喜欢为此使用 mysql/postgres/whatever 文档,而不是使用 ./manage.py 转储数据。
您还需要转储您的生产数据库,以便妥善保管。
接下来在您的本地环境中,我将转储数据库并创建一个新数据库。
然后我会测试你的所有迁移是否真的在一个空白数据库上工作。
这些是 django 1.8 的说明
./manage.py makemirgrations
./manage.py migrate
如果任何迁移处于从空白状态运行的不一致状态,这将有助于显示。如果您遇到任何错误,应先修复它们。
鉴于可行,现在我将测试您的迁移是否确实适用于您的生产数据。
所以删除你的本地数据库,创建一个新的,然后加载生产转储。
如果表已正确配置(即它们在您的生产数据库中处于最新状态),那么您将需要伪造所有迁移。
./manage.py migrate --fake <appname>
但是,鉴于您在本地环境中升级到 1.8 后更改了一些模型,那么您可能只需要伪造一些迁移。这可能是棘手的部分,具体取决于您升级的时间和创建迁移的时间。
因为 django 1.7 只会为每个应用程序创建一个初始迁移,所以您可能需要实际分解某些应用程序的迁移。也就是说,您可能需要手动将该迁移分解为 2 个组件,而不是 0001_initial:
1. 迁移以匹配生产数据库的当前状态
2. 迁移以匹配您从那时起对模型所做的任何其他更改。
一种方法是在 django 1.8 在本地正常工作后检查你的第一次提交,然后运行
./manage.py makemigrations
然后提交
然后继续你的最新提交,然后运行
./manage.py makemigrations
现在您应该在升级到 django 1.8 后修改的每个应用中进行 2 次以上的迁移。
然后,您可以在那些为 django 1.8 进行 2 次以上新迁移的应用上伪造初始值
./manage.py migrate --fake-initial app1 app2
剩下的只是
./manage.py migrate app3 app4
现在运行您的测试以确认一切都在本地运行。
如果您更改了迁移,您将再次需要在本地针对空白数据库进行测试,以测试它们是否正常运行
一旦工作正常,记录您使用的“迁移”命令 - 然后将您的应用部署到生产环境,并在您的服务器上升级到 django 1.8 后仅运行这些迁移命令。
成功完成后
- 获取本地和生产数据库的新转储
- 从本地和生产环境中卸载 South(假设您之前已安装)
我确信上面有几个漏洞,但希望这能给你提供你需要做什么的要点。