Django / SQLite:有没有办法通过检查db.sqlite3来查看某人是否*当前*登录?

时间:2016-11-19 07:58:34

标签: django sqlite

我使用Django 1.10和SQLite作为我的数据库后端。 我有一个运行nginx / uwsgi的站点和上面的配置,我不断用新代码更新。

每次我想更新网站代码时,我都会关闭uwsgi,nginx,git pull来自我的repo的新版本,然后重新启动uwsgi和nginx。

虽然这是有效的,但是在我的代码的新版本更新网站的意义上,副作用是,如果用户当前登录网站并处理某些事情(通常会产生结果)在修改数据库时,用户的工作将被中断。

更糟糕的是,我的代码的新版本包含迁移,这将改变数据库结构,对用户正在进行的工作产生(不可预测的?)后果。

所以问题是:在决定关闭uwsgi和nginx之前,有没有办法像命令行脚本一样检查db.sqlite3并查看用户当前是否已登录?

2 个答案:

答案 0 :(得分:1)

我会说。有机会喜欢

  • 用户已登录并且暂时没有注销。
  • 已登录,但无效

我们可以登录未在django_session表中注销的用户。

答案 1 :(得分:1)

更好的方法是尽量减少停机时间。首先,当您更新代码或uw​​sgi时,没有理由重新启动nginx,并且git pull可以$ git pull # pull in new code while the old process is still running $ python manage.py migrate # run your migrations, and possibly `collectstatic` etc. $ kill -HUP `cat <pidfile>` # gracefully reload the uwsgi process 而不影响当前运行的代码,因此您不需要在拉动之前停止uwsgi在新的代码中。

在迁移方面,请尽量避免任何会破坏当前正在运行的代码的迁移。例如,不要删除当前代码仍在使用的字段/模型,但要等到下次更新(这些字段/模型不再使用时)。这样,您可以在仍然运行旧代码的同时运行迁移,而不会产生任何错误。

接下来,你应该reload uwsgi进程,而不是手动停止和启动它。这将在重新加载进程之前完成处理任何打开的请求。它还将继续监听新请求,以便在重新加载进程后立即处理这些请求。用户可能会遇到速度减慢,但这不会丢弃任何请求,除非在重新加载进程之前队列已填满。对于小规模的网站,这绝不应该发生。

因此,为了避免停机,您可以使用它来更新您的网站:

NULL