Gunicorn behinx 및 Ubuntu 12.04의 nginx 프록시.특정 HTML 문자열을 보내고있는 경우 gunicorn이 오류를 발생하지 않습니다.
나는 HTML 문자열을 보내는 베어 뼈 gunicorn 서버에서 다음과 같은 기능을 가지고 : 나는 send_html(start_response, 'Hello world')
을 실행하면 그냥 잘 작동
def send_html(start_response, replystr):
try:
status = '200 OK'
response_headers = [('Content-type', 'text/html; charset=UTF-8'),
('Content-Length', str(len(replystr)))]
start_response(status, response_headers)
return iter([replystr])
except:
log.info(traceback.print_exc())
send_error(start_response, '501')
return []
.
def _write_with_headers(self, data):
towrite = bytearray()
self.headers_sent = True
self.finalize_headers()
towrite.extend('%s %s\r\n' % (self.request_version, self.status))
for header in self.response_headers:
towrite.extend('%s: %s\r\n' % header)
towrite.extend('\r\n')
if data:
if self.response_use_chunked:
## Write the chunked encoding
towrite.extend("%x\r\n%s\r\n" % (len(data), data))
else:
towrite.extend(data)
self._sendall(towrite)
다음 gevent pywsgi 소스 코드 나
towrite
을 알려줍니다
Traceback (most recent call last):
File "build/bdist.linux-x86_64/egg/gevent/pywsgi.py", line 504, in handle_one_response
self.run_application()
File "build/bdist.linux-x86_64/egg/gevent/pywsgi.py", line 491, in run_application
self.process_result()
File "build/bdist.linux-x86_64/egg/gevent/pywsgi.py", line 482, in process_result
self.write(data)
File "build/bdist.linux-x86_64/egg/gevent/pywsgi.py", line 375, in write
self._write_with_headers(data)
File "build/bdist.linux-x86_64/egg/gevent/pywsgi.py", line 394, in _write_with_headers
towrite.extend(data)
TypeError: an integer or string of size 1 is required
바이트 배열입니다 : 내가 뉴스 기사의 내용을 포함하는 상당한 문자열을 보내려고 할 때 그러나, 나는 다음과 같은 오류마다 시간을 얻을 것으로 보인다
기사 콘텐츠가 바이트 배열 등으로 멋지지 않습니까?
내 첫 번째 추측은 replystr이 제대로 인코딩되지 않았다는 것입니다. 오류를 유발하는 문자열을 표시 할 수 있습니까? 문제를 일으키는 작은 문자열로 문자열의 범위를 좁히십시오. –
그게 내가 끝내 준거야. 나는 정확하게 그 문자열이 오류를 일으킨 것을 기억하지 못한다. 그러나 나의 대답에서 볼 수 있듯이, 그것을 utf-8 bytearray로 인코딩하여 나의 특정한 문제를 해결했다. – Hersheezy