Django 迁移有效,但不会反映在实时站点上

问题描述

我对一个项目做了一些更新:添加 1 个管理模型,添加 1 个模板

我正在使用 wagtail。我将更新拉到我的服务器上,运行迁移,取得了成功。我重启了Nginx和gunicorn,我什至重启了服务器。

当我转到 wagtail 管理员时,我的 adminmodel 丢失了(它在本地存在)。当我去创建一个页面时,我的模板可用,但是当我选择它时,我被带到一个 wagtail 404 页面

Ubuntu 20.04
ngnix
gunicorn
django/wagtail
digital ocean vpc
digital ocean postgres database cluster

站点正常工作,只有一个模板可用,我无法选择,并且迁移的模型不可用且未显示管理员中。我的本地版本运行良好,没有任何区别。似乎服务器既在更新又没有更新。我不明白。运行 makemigrations 或 migrate 不会返回任何更改。即使在特定的应用程序上运行。我需要做些什么来重新启动数据库吗?

解决方法

听着它看起来像 Nginx 的缓存问题。尝试清除缓存。

,

我有 2 个设置文件:dev.py、production.py

dev.py 连接到 sqlite3 db,生产连接到 digitalocean postgres 集群。

python manage.py 自动使用 dev.py(至少在我的设置中)所以我的迁移工作正常,但他们的目标是我在服务器上的 sqlite.db 的旧副本,或者可能创建了一个当一个不存在时。无论哪种方式,实时站点都在 production.py 设置上运行,这就是进行了更改但没有反映的原因。

当您有一个 production.py 文件时运行迁移的正确方法类似于:

python manage.py migrate --settings=<settings app>.<settings folder>.production

我还要补充一点,我发现每次更新 css 样式表时都需要 collectstatic。这有点乏味,也许我错过了自动化步骤,但考虑到这种情况,为了安全起见,我是这样运行的:

python manage.py collectstatic --settings=<settings app>.<settings folder>.production

它不会引起任何问题并且可以正常工作,因此我使用 --settings 标志是安全的。

git pull
python manage.py migrate --settings=app.settings.production
python manage.py collectstatic --settings=app.settings.production
sudo systemctl restart ngix
sudo systemctl restart gunicorn

我不知道重启 ngix 是必要的,除非它解决了我相信更新静态文件的问题。