Pyramid + Nginx + uWSGI 服务器 500 错误

Pyramid + Nginx + uWSGI 服务器 500 错误

我有一个使用 Pyramid 框架用 Python 编写的 uWSGI 应用程序。

Nginx 配置如下(我省略了一些内容,但我认为它们并不重要):

    upstream uwsgicluster {

        server 127.0.0.1:8989;
    }

    # Proxying connections to application servers
    location / {

        include            uwsgi_params;
        uwsgi_pass         uwsgicluster;

        proxy_redirect     off;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;

    }

uWSGI 配置如下(使用.ini 文件):

[uwsgi]

socket = 127.0.0.1:8989
master = true
home = /home/user/userenv
paste = config:/home/user/userenv/app/production.ini
harakiri = 30
logto = /home/user/userenv/log/app.log

一切运行良好。uWSGI 由 Supervisor 管理。

我想要做的是将我的 HTTP 500 响应发送给 Nginx,在某些情况下发送给浏览器。

目前,当出现 HTTP 500 时,堆栈跟踪会正确转到日志文件,但会向 Nginx 返回零字节。

[pid: 19826|app: 0|req: 117/117] 192.168.10.54 () {38 个变量,469 个字节} [2014 年 11 月 11 日星期二 02:46:53] POST /jsonendpoint => 在 2 毫秒内生成 0 个字节 (HTTP/1.1 500) 0 个标头,0 个字节 (核心 0 上的 0 个交换机)

在此之前是 Python 堆栈跟踪和未处理的典型 Python 异常。一切按预期运行。

问题:如何让 uWSGI 将 500 响应的内容返回给 Nginx(以及浏览器)。现在它生成 0 个字节。这是我需要在 Python 框架中进行更深入配置的内容吗?

作为参考,我使用完全标准的(除数据库连接字符串之外没有任何变化)金字塔配置:https://github.com/Pylons/pyramid/blob/master/pyramid/scaffolds/alchemy/production.ini_tmpl

编辑如下

我已经知道这个了。

答案是我的 Pyramid 应用程序没有返回任何数据。

如果您定义一个视图(如下所示),其上下文为 Exception,则此视图将针对所有异常运行。我仍在研究如何获取整个堆栈跟踪(因为这不在 Python 异常处理程序中,但无论如何,主要问题已得到解答)。

@view_config(context=Exception)
def failed_validation(exc, request):
    msg = exc.args[0] if exc.args else ""
    response =  Response('Exception: %s' % msg)

因此,一个子问题是:如何获取整个堆栈跟踪。这可能是一个 Pyramid/Python 组合答案。

相关内容