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 django-users@googlegroups.com
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to