2011-03-13 70 views
0

我正在嘗試使用Phusion Passenger來運行Python 3 WSGI應用程序。使用來自this question的信息,我可以讓Passenger使用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」,上游: 「乘客:UNIX:/ passenger_helper_server:」,主機: 「...」

相同的應用程序代碼確實與客運在Python 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規範只好稍微修改爲Python 3.您需要首先讓應用程序有任何測試WSGI應用(我希望它有)在Python 3下工作,如果你還有其他問題,不幸的事實是你將不得不調試它們來確定問題到底是什麼,所以你可以修復它。

回溯可能有幫助,但似乎PP吞下回溯並輸出錯誤。

可能更容易使用您用來開發應用程序的任何WSGI服務器。

+0

謝謝,但我的問題是讓乘客在Python 3中運行,而不是移植我的應用程序。我還沒有開發應用程序;我只是試圖開始與Passenger一起使用Python 3。我有一個使用Python 2.6在Passenger中運行的Hello World,但是我無法讓Passenger在Python 3中運行。 Passenger也會在打印出回溯時發生。這就是我修復運行2to3後提到的運行時錯誤的方法。 Python不再有任何明確的錯誤。 – Derek 2011-03-13 18:19:25

+0

@德里克:我明白你的問題,我相信我回答了。由於您實際上並沒有開發應用程序,因此您還有其他選擇:使用Python 2.但是,這三種選擇是:1. Port Passenger(並且需要調試,我不能爲您做,您會必須弄清楚爲什麼連接意外關閉,沒有明顯的原因,或者2.不要使用Passenger,或者3.不要使用Python 3。 – 2011-03-13 18:33:24

相關問題