Phusion Passenger를 사용하여 실행중인 Python 3 WSGI 앱을 얻으려고합니다. this question의 정보를 사용하면 승객이 Python 3을 사용할 수 있지만 Python 2.x에서 Passenger로 실행되는 Python 3 앱을 사용할 수없는 것으로 보입니다 (즉, 앱과 Passenger가 동일한 Python 인터프리터에서 실행되어야 함)). 그러므로 나는 3.x에서 여객기를 작동시킬 필요가 있다고 가정한다.Phusion Passenger를 Python 3.x에서 실행하는 방법은 무엇입니까?
Passenger의 request_handler.py에서 2to3으로 실행 한 다음 나머지 런타임 오류를 해결했습니다. 그러나 응용 프로그램을 실행하면 로그에이 오류가있는 502가 표시됩니다.
[오류] 9839 # 0 : * 4 업스트림 클라이언트에서 응답 헤더를 읽는 동안 조기에 닫은 연결이 잘못되었습니다. : _ 요청 : "GET/HTTP/1.1"상류 "승객 : 유닉스/passenger_helper_server", 호스트 : "..."같은 응용 프로그램 코드를 파이썬 2.X에서 승객과 함께 작동합니까
, 따라서 request_handler.py의 2to3 마이그레이션과 관련 있다고 가정합니다. 아래는 내 변경 사항의 차이입니다. 어떤 아이디어? 감사!
27c26
< import traceback
---
> import exceptions, traceback
29c28
< from socket import SocketIO
---
> from socket import _fileobject
65c64
< except Exception as e:
---
> except Exception, e:
67c66
< sys.stderr.write(str(e.__class__) + ": " + str(e) + "\n")
---
> sys.stderr.write(str(e.__class__) + ": " + e.message + "\n")
84c83
< buf = b''
---
> buf = ''
92c91
< buf = b''
---
> buf = ''
99c98
< headers = buf.split(b"\0")
---
> headers = buf.split("\0")
117c116
< env['wsgi.input'] = SocketIO(input_stream,'r',512)
---
> env['wsgi.input'] = _fileobject(input_stream,'r',512)
155c154
< raise exc_info[0](exc_info[1]).with_traceback(exc_info[2])
---
> raise exc_info[0], exc_info[1], exc_info[2]
감사합니다. 제 질문은 실제로 Passenger가 Python 3에서 실행되도록하는 것입니다. 내 앱을 포팅하는 것이 아닙니다. 나는 아직 앱을 개발하지 않았다. 필자는 Python 3 with Passenger를 사용하기 시작하려고합니다. 헬로우 월드가 Python 2.6에서 Passenger에서 실행되고 있지만 Passenger가 Python 3에서 실행되도록 할 수 없습니다. Passenger는 추적 할 때 추적 코드를 인쇄합니다. 이것이 내가 2to3을 실행 한 후에 언급 한 런타임 오류를 수정 한 방법입니다. 더 이상 파이썬에서 오는 명시 적 오류가 없습니다. – Derek
@Derek : 귀하의 질문을 이해했으며 답변을 드렸습니다. 아직 실제로 개발 된 응용 프로그램이 없기 때문에 다른 옵션이 있습니다 : Python 2 사용. 그러나 세 가지 옵션이 있습니다 : 1. 포트 승객 (그리고 그것은 내가 당신을 위해 할 수없는 디버깅을 취할 것입니다. * 연결이 예기치 않게 닫히는 이유를 알아야합니다. 이유가 분명하지 않거나 2. 승객을 사용하지 마십시오. 3. Python 3을 사용하지 마십시오. –