【问题标题】:Parrallel south migration in django causes errorsdjango 中的并行南迁移导致错误
【发布时间】:2014-03-21 08:51:28
【问题描述】:

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

南迁移是更新的一部分。由于迁移,实时站点似乎在当前代码修订版和之前的修订版之间随意切换。

自从发现这一点后,一位前开发人员(在我出现之前就离开了公司)说,我引用:

“永远不要并行运行迁移。运行迁移两次会导致新对象重复>和其他错误!”

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

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

感谢阅读

编辑:我应该补充一下,我将相同的代码推送到登台服务器并且它工作正常,所以问题不是代码

【问题讨论】:

  • 从您的描述中不清楚是什么问题
  • 抱歉,主要问题是“由于迁移,实时站点似乎在当前代码修订版和之前的修订版之间随意切换。”

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


【解决方案1】:

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

但是,如果您确实遇到了这个问题(部分应用迁移等),以下是几个选项:

选项 1

  1. 撤消迁移,如果可以安全撤消,则再次运行它(这次只运行一次 :)
  2. 从部署脚本中删除迁移

选项 2

  1. 打开 Postgres(或其他 DBMS)外壳,检查是否存在您担心可能已创建的 columnstables,然后在需要时检查 remove them,目标是反转所有已运行迁移的(部分)影响
  2. 打开 Django shell 并从 South 的模型模块中导入 MigrationHistory
  3. 找到与已运行迁移相关的 MigrationHistory 对象,然后将其删除
  4. 再次运行迁移
  5. 从部署脚本中删除迁移

请注意,每个选项的最后一步是“从部署脚本中删除迁移”。这是因为您不应该在部署过程中运行数据库更改语句。即使感觉一切都错了,而且老派,您应该在部署后真正运行迁移,在部署期间完全停止服务,以防新代码与旧数据库表一起部署时可能出现问题,并让您的应用程序运行当迁移不太容易出现上述问题时。

【讨论】:

    【解决方案2】:

    原来问题是其中一台前端服务器上的 git fetch 没有占用,这就是导致问题的原因..它与并行运行迁移无关(尽管我不应该这样做)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-03
      • 2011-11-19
      • 2011-04-03
      • 1970-01-01
      • 2012-06-05
      • 2018-07-20
      • 1970-01-01
      相关资源
      最近更新 更多