2017-02-13 78 views
0

本週末我在服務器上部署了我的第一個django應用程序。這是明確的VPS服務器,所以我必須安裝PostgreSQL,PostGIS,設置virtualenv等。製作應用程序需要一些時間。從服務器註銷AJAX請求無法正常使用gunicorn

在Django開發服務器一切正常,但是當我部署我的應用程序gunicorn(nginx的合作)的VPS服務器的AJAX請求不能正常工作。我有三個AJAX請求在另一個之後發送。只有一個或兩個請求返回值。所以我發現GEVENT和這個線程(Django AJAX requests during regular request not going through),並通過以下命令運行gunicorn:

gunicorn myapp:wsgi:application --bind 0.0.0.0:9000 -k gevent --worker-connections 1001 --workers=3 

和它的作品。所有的請求返回值,一切看起來不錯。所以我把進程放到後臺並從服務器註銷。

但每次從服務器註銷時,請求都停止工作。行爲與沒有gevent的第一時間相同。可能是激活虛擬環境的問題,設置還是這是Ubuntu作爲服務器的標準行爲?

我甚至不知道我應該在哪裏找到解決辦法,所以我會很高興的任何幫助。

+0

如何將過程放到背景中?我建議你使用主管,如果需要的話,他將運行並重啓gunicorn。 –

+0

不,我只是按CTRL + Z並寫下bg。如何從dahrens中看到答案可能很糟糕。服務器和應用程序仍在工作,但請求無法正常工作。所以我沒有想到將問題推到背景 – Bulva

+0

因此,如果我理解得很好,這是因爲gevent必須由Supervisor(或類似的東西)監控,這就是爲什麼應用程序仍然可以工作但請求不是。 – Bulva

回答

1

您當前停止註銷過程。您需要一個流程管理器來監控流程。閱讀gunicorn docs尋找很多可能的解決方案。

+0

非常感謝您的回答。我嘗試了一些監視器,但我沒有太多時間,所以我今天晚上會繼續。 – Bulva

1

我建議你使用supervisor。它將確保gunicorn運行,並在崩潰時重新啓動。與sudo apt-get install supervisor

安裝它讓我們假設你有一個名爲test的網站,你可以使用下面的test.config(內/etc/supervisor/conf.d/

[program:test] 
directory=/home/test/www 
command=/home/test/commands/start 
user=nobody 
autostart=true 
autorestart=true 
redirect_stderr=true 
stopsignal=QUIT 
stopasgroup=true 
killasgroup=true 

哪裏/home/test/www是你的Django應用程序的位置(你可以改變它當然)和/home/test/commands/start是一個腳本,您可以告訴gunicorn運行(您粘貼的命令)。

+0

非常感謝。我今天會嘗試 – Bulva

+0

這不起作用。我在文檔中看到它不適用於python 3.對不起。我沒有寫這些信息。我將繼續嘗試下一個選項 – Bulva

+0

Supervisor不支持python3,但您的網站可以使用它。我之前使用過這種組合 –