Есть ли способ запустить Phusion Passenger в Python 3.x? - PullRequest
3 голосов
/ 13 марта 2011

Я пытаюсь запустить приложение Python 3 WSGI с использованием Phusion Passenger.Используя информацию из этого вопроса , я могу заставить Пассажира использовать Python 3, но не представляется возможным, чтобы приложение Python 3 работало с Passenger в Python 2.x (т.е. кажется, что и приложение, и Пассажирдолжен работать в том же интерпретаторе Python).Поэтому я предполагаю, что мне нужно, чтобы Passenger работал в 3.x.

Я запустил 2to3 на request_handler.py Пассажира, а затем обработал оставшиеся ошибки времени выполнения.Однако, когда я запускаю приложение, я просто получаю 502 с этой ошибкой в ​​журнале:

[error] 9839 # 0: * 4 восходящее преждевременно закрытое соединение при чтении заголовка ответа из восходящего потока, клиент:…, Сервер: _, запрос: «GET / HTTP / 1.1», восходящий поток: «passenger: unix: / passenger_helper_server:», хост: «…»

Тот же код приложения работает с Passengerв Python 2.x, так что я предполагаю, что это связано с моей миграцией 2to3 request_handler.py.Ниже приведен список моих изменений.Есть идеи?Спасибо!

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]

Ответы [ 2 ]

0 голосов
/ 01 мая 2019

Современный ответ:

Вы можете указать интерпретатор python через переменную PassengerPython в конфигурации сервера, виртуальном хосте, каталоге или файле .htaccess.

https://stackoverflow.com/a/52582232/1630632

0 голосов
/ 13 марта 2011

Портирование редко сводится к запуску 2to3, и это определенно не относится к приложениям WSGI, где спецификацию WSGI нужно было немного изменить для Python 3. Сначала вам нужно будет выполнить любые тесты, которые имеет приложение (надеюсь, что оно ) работать под Python 3, и если у вас возникнут какие-либо проблемы, прискорбным фактом будет то, что вам придется отлаживать их, чтобы точно выяснить, в чем проблема, и вы сможете ее исправить.

Трассировка могла бы быть полезной, но кажется, что PP проглатывает трассировки и выдает ошибку вместо этого.

Вероятно, проще использовать сервер WSGI, который вы использовали для разработки приложения.

...