开发者

How can I tell Phusion Passenger which python to use?

开发者 https://www.devze.com 2022-12-31 11:30 出处:网络
I\'m using Phusion Passenger with a ruby app and I\'d also like to set it up to work with an django appengine app I\'m working on.

I'm using Phusion Passenger with a ruby app and I'd also like to set it up to work with an django appengine app I'm working on.

Googling for "passenger_wsgi.py" I was able to get the following very simple non-django app working on 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']

However, if I add the line import django.core.handlers.wsgi into the mix, I get 'An error occurred importing your passenger_wsgi.py'. By printing out the sys.path I've discovered that at least part of the r开发者_StackOverfloweason is because Passenger is using the wrong python installation on my machine.

How can I configure Passenger (on apache) to use /opt/local/bin/python2.5 instead of the system default python?


You can specify the python interpreter via the PassengerPython variable in the server config, virtual host, directory, or .htaccess file.

apache: PassengerPython

nginx: passenger_python

standalone: --python


I discovered that if I changed the hashbang at the first line of passenger's request_handler.py file to #!/opt/local/bin/python2.5, passenger used the correct python. But surely there must be a better way than modifying passenger's distribution?


One trick is to include a line like this in your passenger_wsgi.py file:

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

or

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

Each of these basically tells the environment to use your preferred python.

0

精彩评论

暂无评论...
验证码 换一张
取 消