Hello,
First, system information:
Ubuntu 13.10
mod_wsgi 3.4 compiled against Python 3.3 (no problems)
Apache 2.4
Seems when I am running my application, mod_wsgi isn't using the correct interpreter. In my app.wsgi file, I'm outputting the value of sys.executable to a temp file. When mod_wsgi loads my app file, the path to the executable should be written out to the file so I can read it. The path being written out is
/usr/bin/python3 instead of
/home/webuser/projmercury/merc_dev/bin/python3I'm setting both the python-home and python-path flags on my DaemonProcess. The following is from my site configuration in Apache:
WSGILazyInitialization On
WSGIRestrictEmbedded On
Listen 443
<VirtualHost *:443>
ServerName localhost
ServerAlias mercury
SSLEngine on
SSLCertificateFile /etc/ssl/mercury/mercury.crt
SSLCertificateKeyFile /etc/ssl/mercury/mercury.key
WSGIDaemonProcess mercury user=webuser group=webuser \
python-home=/home/webuser/projmercury/merc_dev \
python-path=/home/webuser/projmercury/merc_dev:/home/webuser/projmercury/merc_dev/lib/python3.3/site-packages \
display-name=%{GROUP}
WSGIProcessGroup mercury
WSGIScriptAlias / /var/www/mercury.wsgi
...
</VirtualHost>
From the Apache error.log, I'm seeing the following log entries for mod_wsgi
[:debug] [pid 14496:tid 139645645408128] mod_wsgi.c(10488): mod_wsgi (pid=14496): Socket for 'mercury' is '/var/run/apache2/wsgi.14496.0.1.sock'.
[:info] [pid 14500:tid 139645645408128] mod_wsgi (pid=14500): Starting process 'mercury' with uid=1000, gid=1000 and threads=15.
[:info] [pid 14500:tid 139645645408128] mod_wsgi (pid=14500): Python home /home/webuser/projmercury/merc_dev.
[:info] [pid 14500:tid 139645645408128] mod_wsgi (pid=14500): Initializing Python.
[mpm_worker:notice] [pid 14496:tid 139645645408128] AH00292: Apache/2.4.6 (Ubuntu) mod_wsgi/3.4 Python/3.3.2+ OpenSSL/1.0.1e configured -- resuming normal operations
[:info] [pid 14500:tid 139645645408128] mod_wsgi (pid=14500): Attach interpreter ''.
[:info] [pid 14500:tid 139645645408128] mod_wsgi (pid=14500): Adding '(null)' to path.
[:info] [pid 14500:tid 139645645408128] mod_wsgi (pid=14500): Adding '/home/webuser/projmercury/merc_dev/lib/python3.3/site-packages' to path.
[:info] [pid 14500:tid 139645489436416] mod_wsgi (pid=14500): Create interpreter 'localhost|'.
[:info] [pid 14500:tid 139645489436416] mod_wsgi (pid=14500): Adding '(null)' to path.
[:info] [pid 14500:tid 139645489436416] mod_wsgi (pid=14500): Adding '/home/webuser/projmercury/merc_dev/lib/python3.3/site-packages' to path.
[:info] [pid 14500:tid 139645489436416] [client
10.113.229.150:2761] mod_wsgi (pid=14500, process='mercury', application='localhost|'): Loading WSGI script '/var/www/mercury.wsgi'.
[:info] [pid 14496:tid 139645645408128] mod_wsgi (pid=14500): Process 'mercury' has died, restarting.
[:info] [pid 14579:tid 139645645408128] mod_wsgi (pid=14579): Starting process 'mercury' with uid=1000, gid=1000 and threads=15.
[:info] [pid 14579:tid 139645645408128] mod_wsgi (pid=14579): Python home /home/webuser/projmercury/merc_dev.
[:info] [pid 14579:tid 139645645408128] mod_wsgi (pid=14579): Initializing Python.
[:info] [pid 14579:tid 139645645408128] mod_wsgi (pid=14579): Attach interpreter ''.
[:info] [pid 14579:tid 139645645408128] mod_wsgi (pid=14579): Adding '(null)' to path.
[:info] [pid 14579:tid 139645645408128] mod_wsgi (pid=14579): Adding '/home/webuser/projmercury/merc_dev/lib/python3.3/site-packages' to path.
As you can see, the Python home log entries reflect the correct location, but the file output shows the wrong interpreter.
My application is running fine but I'm not sure why the wrong interpreter is being used. I've tried to upgrade to Ubuntu 14.04 and it breaks my app because python3.4 becomes the default python3 installation (thankfully I can rollback the VM snapshot to 13.10). Pointing to the interpreter in the virtual environment via python-home should fix this issue with Ubuntu 14.04 if it would work correctly. Is there something I'm forgetting to configure?
In case you wonder, here are the lines from my mercury.wsgi file:
import sys
with open('/tmp/merc_interpreter','w') as f:
f.write(sys.executable+'\n\n')
Thank you for any assistance.