我正在嘗試使用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]
謝謝,但我的問題是讓乘客在Python 3中運行,而不是移植我的應用程序。我還沒有開發應用程序;我只是試圖開始與Passenger一起使用Python 3。我有一個使用Python 2.6在Passenger中運行的Hello World,但是我無法讓Passenger在Python 3中運行。 Passenger也會在打印出回溯時發生。這就是我修復運行2to3後提到的運行時錯誤的方法。 Python不再有任何明確的錯誤。 – Derek 2011-03-13 18:19:25
@德里克:我明白你的問題,我相信我回答了。由於您實際上並沒有開發應用程序,因此您還有其他選擇:使用Python 2.但是,這三種選擇是:1. Port Passenger(並且需要調試,我不能爲您做,您會必須弄清楚爲什麼連接意外關閉,沒有明顯的原因,或者2.不要使用Passenger,或者3.不要使用Python 3。 – 2011-03-13 18:33:24