Hi all,
I'm trying to get mod_wsgi working with Django (1.0), and I've hit a
problem that I can't seem to be able to solve. It's simple enough that
I'm sure the solution is obvious and I'm just being stupid, but I've not
been able to find anything that works, even after several hours
searching and trying alternatives :-( Any help for a struggling
mod_wsgi newbie would be much appreciated!
The situation is: I have a simple app. It works in Django's test
server, and is meant to serve from three base URLs - let's call them
/admin, /foo, and /bar. My url.py therefore looks something like this:
-----------------------------------------------
urlpatterns = patterns('',
(r'^admin/(.*)', admin.site.root),
(r'^foo/', another.handler),
(r'^bar/', yet.another.handler)
)
-----------------------------------------------
In the dev server, these are available as /admin, /foo, and /bar.
Now, for production, I want Apache to be serving the root (for example,
the static pages located at /d, /e and /f) but I want /admin, /foo, and
/bar to go to Django via mod_wsgi. After some experimentation, and
after reference to the documentation [1] I hit upon this Apache config:
-----------------------------------------------
WSGIScriptAlias /admin /path/to/my/wsgifile/config.wsgi
WSGIScriptAlias /foo /path/to/my/wsgifile/config.wsgi
WSGIScriptAlias /bar /path/to/my/wsgifile/config.wsgi
<Directory /path/to/my/wsgifile/>
Order deny,allow
Allow from all
</Directory>
-----------------------------------------------
The problem with this is that although access to /admin, /foo and /bar
was being delegated to Django correctly, the URL that was passed to
Django had the /admin (or whatever) stripped off - so its URL matching
did not work. So, I tried using some code from the documentation to add
it back in - in config.wsgi, I put (with mysite.settings and the
sys.path.append changed, of course):
-----------------------------------------------
import os, sys
sys.path.append('/usr/local/django')
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
import django.core.handlers.wsgi
_application = django.core.handlers.wsgi.WSGIHandler()
def application(environ, start_response):
environ['PATH_INFO'] = environ['SCRIPT_NAME'] + environ['PATH_INFO']
return _application(environ, start_response)
-----------------------------------------------
I was unsure about this, as it looked like it was for versions of Django
prior to 1.0, and anyway seemed to be a workaround for a now-fixed
Django bug - but it seemed to work, until I tried to log in using
Django's admin interface, under /admin. When I did that, the login page
appeared correctly, but logging in tried to redirect me to
/admin/admin/admin. After looking at a few other examples, my best
guess is that pages that did redirects were somehow appending an extra
copy of the SCRIPT_NAME at the start of the URL.
I'm not sure what to make of all this but I guess my modified
config.wsgi is completely wrong...
Is that correct? And if so, what is the right way to configure mod_wsgi
so that it handles these "root-level" URLs but also passes them down to
the Django URL resolver?
Any help would be much appreciated!
Cheers,
Giles
[1] http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango
--
Giles Thomas
MD & CTO, Resolver Systems Ltd.
[EMAIL PROTECTED]
+44 (0) 20 7253 6372
Try out Resolver One! <http://www.resolversystems.com/get-it/>
17a Clerkenwell Road, London EC1M 5RD, UK
VAT No.: GB 893 5643 79
Registered in England and Wales as company number 5467329.
Registered address: 843 Finchley Road, London NW11 8NA, UK
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"modwsgi" 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/modwsgi?hl=en
-~----------~----~----~----~------~----~------~--~---