django中的平行南迁移会导致错误

时间:2014-02-20 12:07:56

标签: python django amazon-web-services django-south

我运行了一个代码更新,指向两个前端服务器(Amazon Web Service实例)。

南迁移作为更新的一部分包含在内。由于迁移,实时站点似乎随意在当前代码修订版和先前版本之间进行迁移。

自从发现这个以来,一位先前的开发人员(在我出现之前离开了公司)说,&我引用:

  

"永远不会并行运行迁移。两次运行迁移会导致重复新对象>以及其他错误!"

我的代码更改不涉及任何models.py更改; migrate命令只是结构更新脚本的一部分。在迁移期间也没有抛出任何错误,它们似乎正常运行。

我有数据库备份,所以我可以作为最后的手段回滚数据库。 有没有其他方法可以在不这样做的情况下对问题进行排序?

感谢您阅读

编辑:我应该添加,我将相同的代码推送到临时服务器并且工作正常,所以问题不是代码

2 个答案:

答案 0 :(得分:0)

首先,如果一次迁移尝试添加另一次迁移已添加的表或列,而另一次迁移正在运行,则第一次迁移将失败,回滚事务(即,不更改任何内容)。所以,你不应该真的遇到像你描述的同行那样的问题。

但是,如果您确实以某种方式解决了这个问题(部分应用了迁移等),以下是几个选项:

选项1

  1. 如果迁移安全可逆,则撤消迁移,然后再次运行(此时只执行一次:)
  2. 从部署脚本中删除迁移
  3. 选项2

    1. 打开Postgres(或其他DBMS)shell,检查是否存在您可能已创建的columnstables,然后检查remove them是否存在目标是为了扭转已经运行的迁移的所有(部分)影响
    2. 打开Django shell并从South的模型模块
    3. 导入MigrationHistory
    4. 查找与已运行的迁移相关的MigrationHistory个对象,并将其删除
    5. 再次运行迁移
    6. 从部署脚本中删除迁移
    7. 注意,每个选项的最后一步是“从部署脚本中删除迁移”。这是因为在部署过程中不应运行数据库更改语句。即使感觉一切都错了,老派,你应该在部署后真正运行迁移,在部署期间完全停止服务,如果新代码部署在旧数据库表中可能会出现问题,并且让应用程序保持运行当迁移不太容易出现上述问题时。

答案 1 :(得分:0)

事实证明问题在于其中一个前端服务器上的git fetch没有采取,这就是造成问题的原因..这与并行运行迁移无关(尽管我不应该这样做)< / p>