overflow overflow - 3 months ago 14
Apache Configuration Question

django apache configuration with WSGIDaemonProcess not working

Updated Question

[Mon Jul 18 09:20:10.517873 2016] [:error] [pid 30316:tid 139756302964480] [remote 122.164.94.99:48261] Traceback (most recent call last):
[Mon Jul 18 09:20:10.518005 2016] [:error] [pid 30316:tid 139756302964480] [remote 122.164.94.99:48261] File "/var/www/rent/Rent/wsgi.py", line 20, in <module>
[Mon Jul 18 09:20:10.518141 2016] [:error] [pid 30316:tid 139756302964480] [remote 122.164.94.99:48261] from django.core.wsgi import get_wsgi_application
[Mon Jul 18 09:20:10.518236 2016] [:error] [pid 30316:tid 139756302964480] [remote 122.164.94.99:48261] ImportError: No module named django.core.wsgi


My virtualhost

<VirtualHost *:80>
ServerName ip_address
ServerAdmin webmaster@localhost

Alias /static/ /var/www/rent/static/

Alias /media/ /var/www/rent/media/

WSGIScriptAlias / /var/www/rent/Rent/wsgi.py

WSGIDaemonProcess Rent python-path=/var/www/rent:/root/.virtualenvs/rent/lib/python2.7/site-packages

WSGIProcessGroup Rent

<Directory /var/www/rent/static>
Options -Indexes
Order deny,allow
Allow from all
</Directory>

<Directory /var/www/rent/media>
Options -Indexes
Order deny,allow
Allow from all
</Directory>

LogLevel warn

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Answer
WSGIDaemonProcess   Rent  python-path=/var/www/rent:/root/.virtualenvs/rent/lib/python2.7/site-packages

This is the most likely cause of the problem. You have created a virtualenv inside the super user's home folder. But that folder is unlikely to be accessible to apache. Any user's home folder is no accessible to any other user by default.

The web server and the WSGI process will be running as a non privileged user typically named nobody, httpd, apache or something similar. While you can fix this problem by changing the permissions on /root/ that's a big no no. The best solution is to put the virtualenv in a location accessible by the unprivileged user. /usr/local/virtualenv is a good location.

Please note that moving /root/.virtualenvs/ to /usr/local/virtualenv you will have to recreate it as follows

 source /root/.virtualenvs/rent/bin/activate
 pip freeze > /tmp/requirements.txt
 cd /usr/local/
 virtualenv virtualenv
 source virtualenv/bin/activate
 pip install -r /tmp/requirements.txt

then edit the httpd.conf to reflect the new path.

Comments