Django可以在Nginx(或其他一些服务器,但我们目前将使用Nginx)或使用manage.py runserver
Django自己的服务器上运行。在这两种情况下,我都需要数据完整性和恢复。
对于数据完整性,我不需要终止(某些)Django请求,直到它们完成。它们不应该终止,因为它们应该在数据库中完成开始的数据修改以保持数据完整性(并且不,使用SQL事务不解决方案)。一旦Nginx收到service nginx stop
(在Debian Linux上)或其他类似命令(在其他操作系统上),它们就不应该终止,但在终止之前完成处理。怎么做?
我想要数据恢复:
在服务器启动时创建一个空文件,在服务器停止时将其删除(如何使用Nginx和manage.py runserver
进行删除?)
当服务器启动时,如果找到该文件(表示我们的软件崩溃),在服务器启动之前我们需要运行我的"数据恢复"脚本。怎么做?
答案 0 :(得分:2)
这里有几件事。首先,你绝对不应该在生产中使用runserver。其次,你没有在 nginx中运行真正的Django - 你在WSGI服务器中运行它,比如uWSGI或Gunicorn。通常,它们在 nginx后面运行,但是它们不会在启动和停止时运行。
如果您只是想确保在视图仍在处理时服务器没有停止,那么您肯定可以使用uWSGI来实现。在uWSGI文档中有一个关于这个主题的非常好的文章,名为"The Art of Graceful Reloading"。
只要服务器正常重新加载,我认为您不必担心恢复。但是,如果您仍想尝试,则需要在bash脚本包装中删除空文件 - 服务器停止时不会运行Python代码。