如何告知Phusion Passenger使用哪个Python?

4 投票
3 回答
2779 浏览
提问于 2025-04-15 22:45

我正在使用Phusion Passenger来运行一个Ruby应用,同时也想把它设置成可以支持我正在开发的Django App Engine应用。

我在网上搜索“passenger_wsgi.py”,找到了一个非常简单的非Django应用可以在Passenger上运行:

passenger_wsgi.py:

def application(environ, start_response):
   response_headers = [('Content-type','text/plain')]
   start_response('200 OK', response_headers)
   return ['Hello World!\n']

但是,当我在代码中加入这一行import django.core.handlers.wsgi时,就出现了“导入你的 passenger_wsgi.py 时发生错误”的提示。通过打印出sys.path,我发现问题的部分原因是Passenger使用了我电脑上错误的Python版本。

我该如何配置Passenger(在Apache上)使用/opt/local/bin/python2.5,而不是系统默认的Python呢?

3 个回答

3

一个小窍门是在你的 passenger_wsgi.py 文件中加入这样一行:

if sys.version < "2.4":  
     os.execl("/usr/bin/python2.4", "python2.4", *sys.argv)

或者

INTERP = "/usr/local/bin/python"  
    if sys.executable != INTERP:  
        os.execl(INTERP, INTERP, *sys.argv)

这两种方式基本上都是在告诉环境使用你想要的 Python 版本。

4

你可以通过在服务器配置、虚拟主机、目录或 .htaccess 文件中设置 PassengerPython 变量来指定使用哪个 Python 解释器。

对于 Apache 服务器,你可以查看这个链接了解更多:PassengerPython

对于 Nginx 服务器,可以参考这个链接:passenger_python

如果是独立运行的环境,可以查看这个链接:--python

3

我发现,如果我把 passenger 的 request_handler.py 文件第一行的 hashbang 改成 #!/opt/local/bin/python2.5,那么 passenger 就会使用正确的 Python 版本。但是,修改 passenger 的安装包肯定不是最好的办法吧?

撰写回答