I am trying to setup a python 2.7 + Django + virtualenv + mod_wsgi environment in my centos 6.3 server to run my python application through apache. But I am getting internal error while trying to access the application through apache. The error log shows the following.
============
[Fri Nov 15 04:20:30 2013] [error] [client 117.201.194.54] mod_wsgi (pid=20361): Target WSGI script '/var/www/html/djangosites/spark.wsgi' cannot be loaded as Python module.
[Fri Nov 15 04:20:30 2013] [error] [client 117.201.194.54] mod_wsgi (pid=20361): Exception occurred processing WSGI script '/var/www/html/djangosites/spark.wsgi'.
Fri Nov 15 04:20:30 2013] [error] [client 117.201.194.54] ImproperlyConfigured: Requested setting DEBUG, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
============
It is working fine when running as a test server.
======
(virtualenv)[root@lampserver spark]# python manage.py runserver 0.0.0.0:8080
Validating models...
0 errors found
November 15, 2013 - 09:15:19
Django version 1.6, using settings 'spark.settings'
Starting development server at 0.0.0.0:8080
Quit the server with CONTROL-C.
====
spark.wsgi file looks like the following.
===========
import sys
import site
import os
vepath = '/var/www/html/virtualenv/lib/python2.7/site-packages'
prev_sys_path = list(sys.path)
site.addsitedir(vepath)
sys.path.append('/var/www/html/djangosites')
new_sys_path = [p for p in sys.path if p not in prev_sys_path]
for item in new_sys_path:
sys.path.remove(item)
sys.path[:0] = new_sys_path
from django.core.handlers.wsgi import WSGIHandler
os.environ['DJANGO_SETTINGS_MODULE'] = 'spark.settings'
application = WSGIHandler()
==============
Entries for wsgi in apache conf looks like the following
============
[root@lampserver djangosites]# cat /etc/httpd/conf.d/django.conf
LoadModule wsgi_module modules/mod_wsgi.so
AddHandler wsgi-script .wsgi
WSGIScriptAlias / /var/www/html/djangosites/spark.wsgi
WSGIDaemonProcess spark processes=5 threads=15 display-name=%{GROUP}
WSGIProcessGroup spark
WSGIApplicationGroup %{GLOBAL}
WSGISocketPrefix /var/run/wsgi
=================
Apache is running as user "apache".
My project files and permissions are shown below.
===========
root@lampserver djangosites]# pwd
var/www/html/djangosites
[root@lampserver djangosites]# ls
spark spark.wsgi
[root@lampserver djangosites]# ll
total 8
drwxr-xr-x 3 apache apache 4096 Nov 15 02:38 spark
-rwxrwxrwx 1 apache apache 535 Nov 15 03:16 spark.wsgi
[root@lampserver djangosites]# cd spark/
manage.py spark/
[root@lampserver spark]# ll
total 8
-rwxr-xr-x 1 apache apache 248 Nov 15 02:38 manage.py
drwxr-xr-x 2 apache apache 4096 Nov 15 03:05 spark
[root@lampserver spark]# cd spark/
[root@lampserver spark]# ll
total 28
-rw-r--r-- 1 apache apache 0 Nov 15 02:38 __init__.py
-rw-r--r-- 1 apache apache 136 Nov 15 02:40 __init__.pyc
-rw-r--r-- 1 apache apache 1969 Nov 15 02:38 settings.py
-rw-r--r-- 1 apache apache 2142 Nov 15 02:40 settings.pyc
-rw-r--r-- 1 apache apache 296 Nov 15 02:38 urls.py
-rw-r--r-- 1 apache apache 416 Nov 15 02:40 urls.pyc
-rwxr-xr-x 1 apache apache 385 Nov 15 02:38 wsgi.py
-rw-r--r-- 1 apache apache 589 Nov 15 02:40 wsgi.pyc
==================
Can anybody please identify the problem with my settings?
Regards
Could you start trying to change your wsgi with something more simple like:
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "spark.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Maybe this helps to detect the problem easier
Also use default wsgi file ( spark/wsgi.py
) instead of your spark.wsgi
, of course by changing the WSGIScriptAlias
directive in your apache config file. Here is an example of a simpler apache config file with your site settings, test this and let's me know:
WSGIPythonPath /var/www/html/djangosites:/var/www/html/virtualenv/lib/python2.7/site-packages
WSGIPassAuthorization On
WSGIScriptAlias / /var/www/html/djangosites/spark/wsgi.py
<Directory /var/www/html/djangosites/spark>
<Files wsgi.py>
Order allow,deny
Allow from all
</Files>
</Directory>
Add this line to your spark.wsgi
file:
sys.path.append('/var/www/html/djangosites/spark')
Since your django site is located in that directory
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.