I am trying to set up my Django app behind Apache with mod_python, and
you may have seen this error many times before, but the underlying
EACCES really puzzles me.
CentOS 5.2, Apache 2.2.3, mod_python 2.4.3. /etc/httpd/conf/
httpd.conf says, in part:
<Location "/ambassador/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE ambassador.settings
PythonOption django.root /ambassador
PythonDebug On
PythonPath "['/var/www/amb-django', '/var/www'] + sys.path"
</Location>
Trying to reach the first page (https://host/) gets the oft-heard
refrain that ends in:
ImportError: Could not import settings 'ambassador.settings' (Is it on
sys.path? Does it have syntax errors?): No module named
ambassador.settings
Well, yes it is on sys.path at that point. A quick edit to /usr/lib/
python2.4/site-packages/Django-1.0.2_final-py2.4.egg/django/conf/
__init__.py, line 94, to print sys.path in the exception showed that
it was there, on the front, just as PythonPath did it.
So maybe it's a permission issue. The directory is there:
drwxr-xr-x 23 root root 4096 Mar 4 03:07 /
drwxr-xr-x 21 root root 4096 Mar 14 15:02 /var
drwxr-xr-x 8 root root 4096 Mar 14 19:51 /var/www
drwxr-xr-x 4 apache apache 4096 Mar 14 15:46 /var/www/amb-django
drwxr-xr-x 4 apache apache 4096 Mar 14 20:34 /var/www/amb-django/
ambassador
-rw-r--r-- 1 apache apache 2905 Mar 14 20:30 /var/www/amb-django/
ambassador/settings.py
-rw-r--r-- 1 apache apache 1929 Mar 14 20:34 /var/www/amb-django/
ambassador/settings.pyc
Running this behind a regular Apache (sudo /etc/init.d/httpd start)
fails with the above error, but stopping that and running just "sudo /
usr/sbin/httpd -X" _works_. So much for getting a clean strace that
way. So a dirty strace: sudo strace -ff -o /tmp/apache /etc/init.d/
httpd start. One of its outputs says:
stat64("/var/www/amb-django/ambassador", 0xbf94f914) = -1 EACCES
(Permission denied)
Now how in the world can _that_ happen? "man 2 stat" says EACCES
results if you lack execute permission on some enclosing directory.
As you can see above, no one lacks that permission. This process had
earlier done
setuid32(48) = 0
and 48 is "apache". WTFO? / is ext3, no funny business (that I know
about) with ACLs or anything. Just a bog-standard CentOS 5.2.
Linux myhostname 2.6.18-92.el5PAE #1 SMP Tue Jun 10 19:22:41 EDT 2008
i686 i686 i386 GNU/Linux
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---