修改模型后如何更新已部署的 django-app 的数据库(postgresql)?

How to update database (postgresql) of a deployed django-app, after modifying a model?

我已部署的 Django 应用程序出现问题。

它工作正常,但我不得不对某些型号的 Charfield 进行小修改(增强 max_length)。我进行了迁移,在本地版本中一切正常。

然后我毫无问题地提交了更改,网络版本的提到的字段现在可以接受更多字符,正如预期的那样,但是每当我单击保存按钮时,都会出现服务器错误。

我假设我必须为网络版本做某种 migration/DB 更新,但我似乎没有找到如何做。

(我正在使用 Django 1.11、postgresql 9.6 和 DigitalOcean)。

编辑

我刚刚意识到 'minor modification' 还包括模型中的字段删除。

简答

你必须运行

python manage.py migrate

也在服务器上。在执行此操作之前,请确保您在本地拥有的所有迁移脚本也存在于服务器上。

说明

更改模型后,您可能在本地运行

python manage.py makemigrations

这会创建迁移脚本,这些脚本将运行相应地形成数据库模式。希望您已将这些新创建的脚本与更改后的模型一起提交给 Git。 (如果没有,您现在仍然可以这样做。)

在 运行ning makemigrations 之后(无论是在提交之前还是之后,这都不重要),您可能已经在本地 运行

python manage.py migrate

这会将迁移脚本应用到尚未应用的数据库。 (已经应用的信息存储在数据库本身中。)

您可能(并且希望)没有将本地数据库签入 Git,因此当您将跟踪的更改推送到远程存储库并将它们拉到您的服务器(或者新的Git 修订已完成),尚未对服务器数据库进行更改。所以你必须在服务器上重复最后一个本地步骤(migrate)。

进一步阅读

有关详细信息,请参阅 the Django 1.11 documentation w.r.t. migrations. (You can e.g. limit migration creation or migration application to a single Django app, instead of the whole Django project.) To get the grip of these things, I can recomment the free Django Girls tutorial