2011-03-13 7 views
0

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] 

답변

-1

포팅은 2to3 실행에 대한 거의 없으며, 그것은합니다 (WSGI 사양이 약간 파이썬 당신이 먼저 응용 프로그램이있는 모든 테스트를 확인해야합니다 3. 수정할 수했다 WSGI 애플리케이션에서 그것에 대해하지 확실히이다 나는 그것이 Python 3에서 작동하기를 바랍니다. 그리고 나머지 문제가 있다면 불행한 사실은 문제를 정확히 알아 내기 위해 디버깅해야한다는 것입니다. 문제를 해결할 수 있습니다.

추적 기능이 유용 할 수 있지만 PP가 추적 코드를 삼켜 서 오류를 대신 출력하는 것으로 보입니다.

응용 프로그램을 개발하는 데 사용한 WSGI 서버를 사용하는 것이 더 쉽습니다.

+0

감사합니다. 제 질문은 실제로 Passenger가 Python 3에서 실행되도록하는 것입니다. 내 앱을 포팅하는 것이 아닙니다. 나는 아직 앱을 개발하지 않았다. 필자는 Python 3 with Passenger를 사용하기 시작하려고합니다. 헬로우 월드가 Python 2.6에서 Passenger에서 실행되고 있지만 Passenger가 Python 3에서 실행되도록 할 수 없습니다. Passenger는 추적 할 때 추적 코드를 인쇄합니다. 이것이 내가 2to3을 실행 한 후에 언급 한 런타임 오류를 수정 한 방법입니다. 더 이상 파이썬에서 오는 명시 적 오류가 없습니다. – Derek

+0

@Derek : 귀하의 질문을 이해했으며 답변을 드렸습니다. 아직 실제로 개발 된 응용 프로그램이 없기 때문에 다른 옵션이 있습니다 : Python 2 사용. 그러나 세 가지 옵션이 있습니다 : 1. 포트 승객 (그리고 그것은 내가 당신을 위해 할 수없는 디버깅을 취할 것입니다. * 연결이 예기치 않게 닫히는 이유를 알아야합니다. 이유가 분명하지 않거나 2. 승객을 사용하지 마십시오. 3. Python 3을 사용하지 마십시오. –

관련 문제