模型更新后生产服务器上出现500错误

时间:2016-04-17 13:43:53

标签: django database heroku django-models migration

我在Heroku上部署了一个新的django应用程序。但是,今天我稍微更改了我的模型(添加了一个新字段),然后删除了我的开发服务器文件db-sqlite3和迁移文件夹,以反映开发数据库中的更改。这在本地服务器上运行良好,但是当我将其推送到heroku时,在尝试访问django-admin部分中的模型时出现500错误。

我尝试通过heroku运行一些迁移但是我收到以下错误消息:

 ! These migrations are in the database but not on disk:
    <joins: 0002_auto__add_field_join_ip_address>
    <joins: 0003_auto__add_unique_join_email>
    <joins: 0004_auto__add_field_join_ref_id>
    <joins: 0005_auto__add_unique_join_email_ref_id>
    <joins: 0006_auto__add_unique_join_ref_id>
    <joins: 0007_auto__del_unique_join_ref_id>
    <joins: 0008_auto__del_unique_join_email__add_unique_join_ref_id>
    <joins: 0009_auto__add_field_join_friend>
 ! I'm not trusting myself; either fix this yourself by fiddling
 ! with the south_migrationhistory table, or pass --delete-ghost-migrations
 ! to South to have it delete ALL of these records (this may not be good).
(lwc) Daniels-MacBook-Pro:src danielrichter$ heroku run python manage.py migrate --delete-ghost-migrations

我可以看到,在我的本地迁移文件夹中,我只有0001_initial迁移,并以某种方式遗漏了另一个,但我不知道如何解决该问题。

我已经看到其他人遇到了同样的错误信息,但我不理解建议的答案,因为我对Django和编码很新。所以,如果有人能给我一个如何解决这个问题的提示,我将非常感激!

非常感谢!

2 个答案:

答案 0 :(得分:0)

显然,数据库认为您已应用了邮件中提到的迁移,但它无法在磁盘上找到这些文件。你确认。也许你的版本管理出了问题,你丢失了这些文件?我试着看看你是否可以恢复文件,然后问题就会结束。

如果没有,那就有点难了。提到的迁移可能已经执行但文件丢失了。您还进行了尚未应用的新更改。您应该尝试将代码状态恢复到执行上次丢失迁移的状态。然后,您可以创建一个新的迁移文件(python manage.py schemamigration --auto your_app_name),该文件可以替换丢失的迁移文件。此迁移将被称为0002_something(0001存在,0002是下一个)。在此替换迁移之后,您可以进行新的迁移(0003和更进一步)。

在服务器上,在更新您的代码版本之前(因此您不具备0002)执行python manage.py migrate --delete-ghost-migrations。这将删除对缺少的迁移的引用。之后,您可以更新您的版本并获得新的0002等迁移。

致电python manage.py migrate --fake your_app_name 0002。这将告诉数据库已应用迁移,而不实际应用任何内容。这很好,因为丢失的迁移文件已经应用了这些更改。

在此之后,您可以运行正常迁移:python manage.py migrate,它应该是好的。

希望这有帮助。

答案 1 :(得分:0)

  

然后删除了我的开发服务器文件db-sqlite3和   迁移文件夹以反映开发中的更改   数据库

这是您的问题,您不应删除任何迁移文件,如果您在数据库中进行更改,django(或南方)将为这些更改创建新的迁移文件,然后运行迁移命令以应用这些更改更改数据库,您必须提交这些新的迁移文件并将它们发送到heroku,因此更改也将应用于远程数据库。

工作流程如下:

  1. 您有一些迁移文件或初始文件
  2. 通过添加/删除字段来修改模型
  3. 在django(没有南方)中创建迁移文件:

    python manage.py makemigrations

  4. 通过runnig:

    将这些更改应用到本地数据库

    heroku run python manage.py migrate

  5. 将这些模型更改和迁移文件添加到您的git索引
  6. 将更改推送到heroku并运行迁移命令:

    heroku run python manage.py migrate