关于在部署Django应用时如何配置nginx配合uWGSI的教程有很多。
但是为什么我需要在这个套件中使用 nginx?uWSGI 本身可以服务 WSGI Python 应用程序,可以服务静态文件,也可以做 SSL。nginx 可以做什么而 uWSGI 不能?
不记得在哪里,但我读到 uWSGI 可以像 Django 开发服务器一样在修改项目脚本时重新加载自身。我在文档和互联网中都找不到。我怎样才能做到这一点?
我在我的工作机器上使用 Ubuntu 12.04,在舞台和生产服务器上使用 Debian Squeeze,Django 1.4 和 uWSGI 1.2。
我正在尝试按照本教程uWSGI使用Django和nginxon进行设置Ubuntu16.04。
一切正常,直到我尝试执行此命令的最后一步(哦,讽刺的是...):
sudo service uwsgi start
Run Code Online (Sandbox Code Playgroud)
如果失败并出现以下错误:
启动 uwsgi.service 失败:未找到单元 uwsgi.service。
其他人似乎得到了类似的错误:
启动 uwsgi.service 失败:单元 uwsgi.service 加载失败:没有这样的文件或目录。
该问题似乎与 Ubuntu 的版本有关。虽然该教程针对的是 Ubuntu 14.04,但它似乎不适用于较新的版本,因为在 15 版中 Ubuntu 从upstartinit daemon切换到systemdinit daemon。
如何使用systemduWSGI 启动 uWSGI 以便它与 nginx 和 Django 一起使用?
我刚刚在虚拟环境中安装uwsgi了pip install uwsgi。在我使用的“ini”文件中:
socket = 127.0.0.1:3000
# no pidfile option
Run Code Online (Sandbox Code Playgroud)
并运行 uwsgi --ini config.ini
但是如何停止这个 uwsgi 实例呢?
uwsgi --stop ...想要一个pid文件。我不能使用地址:
open("127.0.0.1:3000"): No such file or directory [core/io.c line 505]
Run Code Online (Sandbox Code Playgroud)
如果杀死 - uwsgi 只会重生。
我有一个正在执行 bash 脚本的 django 应用程序。我需要重新启动 nginx 服务器,所以我运行/etc/init.d/nginx reload效果很好。我一直在使用restart uwsgiuwsgi,但我需要正常重新加载而不是硬重启服务器。
我怎样才能做到这一点?
我目前正在通过 .bashrc 运行 bashreload uwsgi函数subprocess.popen。它似乎只是重新加载调用子进程的进程,而不是由 uwsgi 实例托管的所有站点。importing uwsgi并且运行uwsgi.reload似乎也只影响调用过程。是否有通过 python 或 bash 切换 uwsgi 的开关,允许重新启动所有 uwsgi 进程
我正在运行一个带有各种 Vassals 的 uwsgi Emperor,每个 Vassals 都为来自不同 virtualenv 的特定 Python 应用程序提供服务。由于 uwsgi 是用它自己的 Python 2.7 解释器编译的,因此尝试在其中使用带有 Python 3 的 virtualenv 会在 vassal.log 中产生以下错误:
ImportError: No module named site
Run Code Online (Sandbox Code Playgroud)
我相信这个错误的根源是 uwsgi 使用的是它内置的 Python 2.7 解释器,而它运行的 virtualenv 目录只支持 Python 3 解释器。事实上,当我使用另一个 uwsgi(只需将它安装pip install uwsgi在同一个 virtualenv 中)时,错误就会消失。但是,我希望一个皇帝统治几个不同的 virtualenv,所以在每个虚拟环境中安装一个单独的 uwsgi 不是一种选择。
根据Stackoverflow 上的这个答案,解决这个问题的正确方法是使用不同的 Python 解释器编译 uwsgi 作为可加载模块。在我采用这种方法之前,我想知道如何配置我的 Vassals 以使用另一个解释器插件。
现在我有一个皇帝,它从我的 /etc/rc.local 启动,并具有以下设置:
[uwsgi]
uid = www-data
gid = www-data
master = true
emperor = /etc/uwsgi/vassals
daemonize = /var/log/uwsgi/emperor.log
Run Code Online (Sandbox Code Playgroud)
然后我有一堆 Vassals …
虽然 uwsgi 文档对于已经熟悉服务器管理的人来说可能很好,但对于尝试学习它的人来说绝对没有太大帮助。我希望有人可以帮助解决以下问题。
我读到,它可以正常关闭/重新加载进程。但是,这是什么意思?优雅关闭的替代方法是什么?
这些进程什么时候可以优雅/丑陋地关闭?是不是进程崩溃了?或者,如果我选择关闭 uwsgi,例如按 ctrl+c?或者在其他一些情况下?我可以测试一下这种优雅性吗,例如引起 smth 崩溃/关闭,然后在有和没有 master 的情况下查看结果?
除了让进程正常关闭之外,它还能做什么?
由于启用主进程是可选的,因此肯定存在使用它没有好处的情况。这些案例是什么?
我有一个 Django 站点,我试图通过 uWSGI 为其提供服务。我已经像这样启动了服务器:
uwsgi --emperor .
Ctrl+Z
bg 1
Run Code Online (Sandbox Code Playgroud)
(有两个.ini文件,分别指向网站的测试版和生产版,分别服务于9001和9002)
然后我尝试获取我的网站:
curl http://localhost:9002
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我收到一条消息,说 vassel 是忠诚的,但没有实际响应。然后 uwsgi.log 包含以下内容:
[pid: 5071|app: 0|req: 2/2] 127.0.0.1 () {26 vars in 357 bytes} [Tue Jul 23 13:20:21 2013] GET / => generated 0 bytes in 1 msecs (HTTP/1.1 302) 2 headers in 96 bytes (1 switches on core 1)
Run Code Online (Sandbox Code Playgroud)
没有错误记录。
我应该说,这在重新启动之前工作正常,因此 uwsgi.ini 文件应该没问题。
我应该从哪里开始诊断的任何想法?
我发现我的网站没有响应,我看到了很多
*** uWSGI listen queue of socket "0.0.0.0:5002" (fd: 3) full !!! (101/100) ***
*** uWSGI listen queue of socket "0.0.0.0:5002" (fd: 3) full !!! (101/100) ***
*** uWSGI listen queue of socket "0.0.0.0:5002" (fd: 3) full !!! (101/100) ***
Run Code Online (Sandbox Code Playgroud)
我被毒死了吗?到底是怎么回事?
我正在使用 uWSGI 和 nginx 在 CentOS 服务器上运行 Python Pyramid 应用程序。我使用 SQLAlchemy 作为 ORM,使用 MySQLdb 作为 API,使用 MySQL 作为数据库。该网站还没有上线,所以唯一的流量是我和公司的其他一些员工。我们购买了一些数据来填充数据库,因此最大(也是最常查询)的表是 ~150,000 行。
昨天我快速连续打开了网站的四个新标签,我收到了几个 502 Bad Gateway 错误。我查看了 uWSGI 日志,发现以下内容:
sqlalchemy.exc.OperationalError: (OperationalError) (2006, 'MySQL server has gone away') 'SELECT ge...
Run Code Online (Sandbox Code Playgroud)
重要说明: 此错误不是由 MySQL 的 wait_timeout 引起的。去过也做过。
我想知道这个问题是否是由同时提供并发请求引起的。我让自己成为一个穷人的负载测试员:
for i in {1..10}; do (curl -o /dev/null http://domain.com &); done;
Run Code Online (Sandbox Code Playgroud)
果然,在这十个请求中,至少有一个会抛出 2006 错误,通常更多。有时错误会变得更奇怪,例如:
sqlalchemy.exc.NoSuchColumnError: "Could not locate column in row for column 'table.id'"
Run Code Online (Sandbox Code Playgroud)
当该列绝对存在并且在所有其他相同请求上工作正常时。或者,这个:
sqlalchemy.exc.ResourceClosedError: This result object does not return rows. It has been …Run Code Online (Sandbox Code Playgroud)