AJAX 从服务器注销后,请求无法与 gunicorn 一起正常工作

AJAX requests not working properly with gunicorn when logged out from server

这个周末我在服务器上部署了我的第一个 Django 应用程序。很明显 VPS 服务器所以我必须安装 PostgreSQL、PostGIS、设置 virtualenv 等等。应用程序运行需要一些时间。

在 django 开发服务器上一切正常,但是当我在 VPS 服务器上使用 gunicorn(与 Nginx 合作)部署我的应用程序时,AJAX 请求无法正常工作。我有三个 AJAX 请求一个接一个地发送。并且只有一两个请求具有 returned 值。所以我用这个命令找到了 gevent 和这个线程()和 运行 gunicorn:

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

并且有效。所有请求 return 值,一切看起来都正常。所以我将进程置于后台并从服务器注销。

但是每次我从服务器注销时,请求都会停止工作。行为与没有 gevent 的 firstime 相同。可能是激活虚拟环境、设置的问题,或者这是 Ubuntu 作为服务器的标准行为?

我什至不知道应该在哪里找到解决方案,所以我很乐意提供任何帮助。

您目前在注销时停止进程。您需要一个流程管理器来监控流程。阅读 gunicorn docs 以获得许多可能的解决方案。

我建议你使用supervisor。它将确保 gunicorn 运行s,并在崩溃时重新启动。使用 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 运行(你的命令粘贴)。