是否可以在heroku上部署的应用程序上重置Django迁移?

时间:2019-02-20 05:10:19

标签: django heroku

我已将Django应用程序部署到heroku,但是我需要重置这些迁移。是否可以在不删除整个项目并重新部署的情况下实现?我在该数据库中有一些测试数据,我不想不必再次输入。

我想删除所有迁移文件并创建新文件。问题是,我从本地计算机上删除了所有迁移文件,并创建了新文件,因此现在本地计算机上的迁移文件全部为001。将其推送到heroku表示没有任何更改,因为其中已经存在001迁移文件。仅删除它们将起作用。基本上类似于

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

但是对于heroku。

2 个答案:

答案 0 :(得分: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。在这种情况下,您可以重新回滚到新版本,而不必进行常规发行。

答案 1 :(得分:0)

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

  • 如果未删除或更改此类列,则可以为当前数据库模式<生成夹具
  • 您可以转储数据库,而不仅仅是从数据库服务器中删除数据库并再次迁移!比将转储的数据加载到新的数据库中,这将确保您之前的数据安全。