【问题标题】:Is it possible to reset django migrations on an application deployed on heroku?是否可以在部署在 heroku 上的应用程序上重置 django 迁移?
【发布时间】:2019-02-20 05:10:18
【问题描述】:

我已将 django 应用程序部署到 heroku,但我需要重置这些迁移。如果不删除整个项目并重新部署它,这可能吗?我在那个数据库中有一些测试数据,我不想重新输入。

我想删除所有迁移文件并创建新文件。问题是,我从本地机器上删除了所有迁移文件并创建了新文件,所以现在我本地机器上的迁移文件都是 001。将其推送到 heroku 表示没有任何更改,因为 001 迁移文件已经存在于那里。只有删除它们才会起作用。基本上类似于

find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
find . -path "*/migrations/*.pyc" -delete

但是对于heroku。

【问题讨论】:

  • “重置那些迁移”到底是什么意思。您是否已经对数据库应用了一些迁移?在这种情况下,您可以使用 python manage.py migrate myapp 0005 来反向迁移,其中 0005 是您要恢复到的迁移。
  • 是的。我已经申请了一些迁移,但我不一定想恢复到某个迁移,我想只是摆脱所有这些迁移并进行新的迁移。
  • @NelsonKing,我很困惑。一方面听起来你想migrate zero 甚至删除迁移文件并创建新文件,但另一方面你说“我在那个数据库中有一些测试数据,我不想全部输入再次。”你能扩展最后一点吗?您在这里的实际目标是什么?
  • 我想删除所有迁移文件并创建新文件。问题是,我从本地机器上删除了所有迁移文件并创建了新文件,所以现在我本地机器上的迁移文件都是 001。将其推送到 heroku 表示没有任何更改,因为 001 迁移文件已经存在于那里。只有删除它们才会起作用。基本上类似于find . -path "*/migrations/*.py" -not -name "__init__.py" -delete find . -path "*/migrations/*.pyc" -delete 但对于heroku。

标签: django heroku


【解决方案1】:

推送到 Heroku 是解决方案的一部分,但不是全部。这会更新迁移文件,但不会更新数据库中的django_migrations 表。

  1. 如果您仍然在 Heroku 上运行旧代码:

    1. 备份您的数据库

    2. 反转所有迁移:

      heroku run python manage.py migrate appname zero
      
    3. 然后部署你的新代码:

      git push heroku master
      
    4. 然后运行新的迁移:

      heroku run python manage.py migrate
      
  2. 如果您已经将新代码部署到 Heroku:

    1. 备份您的数据库

    2. 从数据库中手动删除应用程序的表,以及django_migrations 表中app 与您的应用程序名称匹配的行,例如通过heroku pg:psql(如果您安装了其他应用程序和应用程序间依赖项,这可能会变得很棘手)

    3. 运行您的新迁移:

      heroku run python migrate
      

如果您已经将新代码部署到rollback,则另一个可能更安全的选项是反映您的数据库架构的版本,然后使用上面的选项 1。在这种情况下,您可以再次回滚到新版本,而不是进行常规发布。

【讨论】:

    【解决方案2】:

    是的,它可以通过两种方式完成。

    • 如果没有删除或更改此类列,您可以为当前的数据库架构生成固定装置
    • 您可以转储数据库,而不仅仅是从数据库服务器中删除数据库并再次迁移!将转储的数据加载到新的数据库中,这将确保您以前的数据安全。

    【讨论】:

    • 绝对是解决此问题的最简单方法。转储+重置数据库+加载数据
    猜你喜欢
    • 2011-12-05
    • 1970-01-01
    • 2018-05-15
    • 2013-08-22
    • 2011-12-19
    • 2015-06-30
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多