我在CentOS 6服务器上设置了nginx和uwsgi。当我将一些数据发布到Web服务器时,它会被正确处理但不返回任何输出。如果我在应用程序函数返回之前就在应用程序之前打印生成的html,则控制台中的HTML显示正确,但控制台上的下一行是:
[pid: 31650|app: 0|req: 2/2] <server ip> () {48 vars in 873 bytes} [Mon Sep 15 18:19:45 2014] POST / => generated 0 bytes in 10583 msecs (HTTP/1.1 200) 1 headers in 44 bytes (418 switches on core 0)
我已经增加了套接字超时但没有什么区别。
编辑:我为此提出了一个奇怪的解决方法。我的html存储在变量&#39; html&#39;中。我改变了我的代码:return [html] #This would not return any output even though 'print html' was fine
要:
open('/tmp/ot.txt', 'w').write(html)
d = open('/tmp/ot.txt').read()
return [d] #This works!
我不想使用我的解决方法。任何想法为什么这个工作和原来没有。 Python版本是2.6.6
答案 0 :(得分:4)
您的问题可能是uwsgi以静默方式删除任何unicode对象,并且只显示字节字符串。这就是为什么当你写一个文件然后把它读回来时,它起作用了,因为write()默默地将unicode转换为ascii编码(如果有ord(x) > 127
的任何东西则引发异常),以及read()返回字节。
在这种情况下,解决方案将是return [html.encode('utf8')]
或您正在使用的任何编码。
我之所以发现这一点,是因为我在任何markdown.markdown(text)
文件上调用.md
,并将.html
个文件直接附加到我的输出中。只显示HTML,而不是markdown,哪个模块返回Unicode。
答案 1 :(得分:4)
WSGI应用必须返回可迭代的字节(python2 / 3)或可迭代的字符串(python2)。吞下Unicode对象是为了避免破坏旧的/破坏的中间件,返回如下所述的空字符串: