2016-09-27 42 views
0

Django可以在Nginx(或其他一些服务器,但我们现在要使用Nginx)或manage.py runserver Django自己的服务器上运行。在这两种情况下,我需要数据完整性和恢复。使用Django和Nginx的数据完整性和恢复

对于数据完整性,我不需要终止(一些)Django请求,直到完成。他们不应该终止,因为他们应该完成在数据库中启动数据修改以保持数据完整性(并且不,使用SQL事务是而不是的一种解决方案)。只要Nginx收到service nginx stop(在Debian Linux上)或其他类似的命令(在其他操作系统上),它们不应该终止,而是在终止之前完成处理。这个怎么做?

对于数据恢复我想:

  1. 在服务器启动时创建一个空文件,服务器停止时将其删除(如何使用Nginx的与manage.py runserver做到两者兼而有之?)

  2. 当服务器启动时,如果找到文件(表明我们的软件崩溃),在服务器启动之前,我们需要运行我的“数据恢复”脚本。这个怎么做?

+0

为什么交易不是一种选择?由于使用需要处理的django信号? – dahrens

+0

和哪个wsgi服务器实际运行在nginx后面? – dahrens

+0

@dahrens大写作交易不是一种选择,因为它们会导致所有客户的阅读操作**延迟**。 – porton

回答

2

这里有一些东西。首先,你绝对不应该在生产中使用runserver。其次,你不运行Django nginx - 你运行它在一个WSGI服务器,如uWSGI或Gunicorn。通常,这些在后面运行nginx,但它们不会在启动时停止。

如果你只是想确保服务器不停止,而视图仍在处理,你可以肯定地用uWSGI做到这一点。在uWSGI文档"The Art of Graceful Reloading"中有关于此主题的相当好的文章。

只要优雅地重新加载服务器,我认为您不必担心恢复问题。但是,如果您仍想尝试这样做,则需要在bash脚本包装器中执行空白文件删除 - 服务器停止时不会运行Python代码。