如何告知Phusion Passenger使用哪个Python?
我正在使用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 个回答
一个小窍门是在你的 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 版本。
你可以通过在服务器配置、虚拟主机、目录或 .htaccess 文件中设置 PassengerPython
变量来指定使用哪个 Python 解释器。
对于 Apache 服务器,你可以查看这个链接了解更多:PassengerPython
对于 Nginx 服务器,可以参考这个链接:passenger_python
如果是独立运行的环境,可以查看这个链接:--python
我发现,如果我把 passenger 的 request_handler.py
文件第一行的 hashbang 改成 #!/opt/local/bin/python2.5
,那么 passenger 就会使用正确的 Python 版本。但是,修改 passenger 的安装包肯定不是最好的办法吧?