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 -~----------~----~----~----~------~----~------~--~---