Gunicorn(Python3.4和3.3)仅发送响应头而无数据
我在云端有一个虚拟机,使用的是Python 3.3(也试过3.4,结果一样)和Gunicorn 18。
我复制粘贴了一个“你好,世界”的应用程序(app.py):
def app(environ, start_response):
data = "Hello, World!\n"
start_response("200 OK", [
("Content-Type", "text/plain"),
("Content-Length", str(len(data)))
])
return iter([data])
然后我运行了:
gunicorn -w 4 -b 0.0.0.0:8000 app:app
工作进程启动没有错误,但当我尝试用浏览器打开时,只能看到头部信息,没有内容:
Connection: "close"
Content-Length: "14"
...and so on
如果我添加一些自定义头部信息,我能在响应中看到它,但就是没有响应内容。请帮帮我。
2 个回答
19
为了补充Graham的解释,把
return iter([data])
换成
return [bytes(data, 'utf-8')]
在Python 3中对我来说是有效的。当我遇到同样的问题时,这个方法也解决了我的问题。
6
首先,你的代码不是一个有效的Python 3的WSGI应用。它必须返回一个可以迭代的字节字符串,而不是原生的字符串(在Python 3中是unicode字符串)。另外,使用iter()这个函数也是多余的,直接返回列表就可以了。