2016-09-27 59 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代碼。