On Wednesday, December 15, 2010 11:10:06 PM UTC+11, Craig Trader wrote: > > Here's how I solved this problem for my own applications. Note that I use > VirtualEnv to ensure that each application gets exactly the Python > environment I want it to have. If you don't use VirtualEnv, it will make > the WSGI startup script simpler. Assume that my application is installed > with the following layout: > > /data/web/foo/ -- base directory for foo (and the root of a VirtualEnv > environment) > bin/ -- VirtualEnv scripts, including 'python' symlink > lib/ -- Python libraries, including Django > apache/apache.wsgi -- Apache WSGI startup script > site/foo -- where the Foo site is installed (containing applications > like bar, baz, etc.) > site/foo/static -- where static content is stored > > First, the Apache virtual host configuration: > > <VirtualHost *:80> > ServerName foo.example.com > ServerAdmin f...@example.com > ServerSignature email > > LogLevel debug > > WSGIProcessGroup foo > WSGIDaemonProcess foo processes=2 threads=5 home=/data/web/foo > display-name=foo > > DocumentRoot /var/www > > WSGIScriptAlias / /data/web/foo/apache/django.wsgi > <Directory /data/web/foo/apache> > Order allow,deny > Allow from all > </Directory> > > Alias /static/ /data/web/foo/site/foo/static/ > <Directory /data/web/foo/site/foo/static/> > SetHandler None >
Don't need this SetHandler directive. That was need for mod_python but not with mod_wsgi. > Order allow,deny > Allow from all > </Directory> > </VirtualHost> > > And now the WSGI startup script (most of this is just to make VirtualEnv > work): > > import os, sys, site > > here = os.path.abspath( os.curdir ) > >From here: > > ALLDIRS = [ > os.path.join( here, 'site' ), > os.path.join( here, 'lib', 'python2.6', 'site-packages' ), > ] > > # Remember original sys.path. > prev_sys_path = list(sys.path) > > # Add each new site-packages directory. > for directory in ALLDIRS: > site.addsitedir(directory) > > # Reorder sys.path so new directories at the front. > new_sys_path = [] > for item in list(sys.path): > if item not in prev_sys_path: > new_sys_path.append(item) > sys.path.remove(item) > sys.path[:0] = new_sys_path > to here, should be able to be simplified to: activate = os.path.join(here, 'bin', 'activate_this.py') execfile(activate, dict(__file__=activate)) sys.path.insert(0, os.path.join(here, 'site')) I no longer object to the activate_this.py script even though it modifies sys.prefix. Although technically that could be problematic, hasn't shown itself to be in practice. Graham > > os.environ['DJANGO_SETTINGS_MODULE'] = 'foo.settings' > > import django.core.handlers.wsgi > application = django.core.handlers.wsgi.WSGIHandler() > > In my settings.py file, I have the following: > > import os, sys > > SITEDIR = os.path.dirname( os.path.dirname( os.path.abspath( __file__ ) ) ) > > MEDIA_ROOT = os.path.join( SITEDIR, 'foo', 'static' ) > MEDIA_URL = '/static/' > ADMIN_MEDIA_PREFIX = '/media/' > > ROOT_URLCONF = 'foo.urls' > > TEMPLATE_DIRS = ( > os.path.join( SITEDIR, 'foo', 'templates' ), > ) > > INSTALLED_APPS = ( > 'django.contrib.auth', > 'django.contrib.contenttypes', > 'django.contrib.sessions', > 'django.contrib.sites', > 'django.contrib.messages', > 'django.contrib.admin', > 'foo.bar', > 'foo.baz', > ) > > My urls.py file looks like this: > > from django.conf import settings > from django.conf.urls.defaults import * > from django.contrib import admin > from django.shortcuts import render_to_response > > # Uncomment the next two lines to enable the admin: > admin.autodiscover() > > def home( *args, **options ): > return render_to_response( 'index.html' ) > > urlpatterns = patterns( '', > url( r'^$', home, name='site_index' ), > ( r'^admin/', include( admin.site.urls ) ), > ( r'^foo include( 'stackexchange.foo.urls' ) ), > ( r'^bar include( 'stackexchange.bar.urls' ) ), > ( r'^static/(?P<path>.*)$', 'django.views.static.serve', > {'document_root': settings.MEDIA_ROOT } ), > ) > > You only need the 'static' definition for when you're testing using > 'runserver'; Apache intercepts all of the /static/ URLs before Django sees > them in production. > > I hope this helps. > > - Craig - > > On Wed, Dec 15, 2010 at 03:17, NoviceSortOf <dljons...@gmail.com> wrote: > >> On Dec 15, 8:08 am, mongoose <darren...@gmail.com> wrote: >> > > I'm trying to run projects on the back of it. For examplehttp:// >> baseurl.com/mongoose/ >> > > The projects run but the URL don't work properly because they all >> > > reference the base url. So for 'About Me' page it points tohttp:// >> baseurl.com/aboutinsteadofhttp://baseurl.com/mongoose/about >> > >> > > Is this something i need to change in django or apache? Is what I'm >> > > trying to do even possible? >> >> I wrestled with something like this - as we needed a static homepage >> based on a django backend for one site. >> >> Per my recollection what I did was. >> >> * Apache httpd.conf required a location match adjustment something >> like. >> >> <LocationMatch "\.(jpg|gif|png|php|html)$"> >> SetHandler None >> </LocationMatch> >> >> * My url.py file needed this line >> (r'^$', direct_to_template,{'template': 'index.html'}), >> >> * As well I landed up having to put the index.html into both >> full static form in the .com root as well in the django template >> folder. >> This was neccesary so people could load into the site as >> "www.somewhere.com" >> and while once in the django backend >> "www.somewhere.com/index.html" would load for further >> navigating. >> >> I hope that makes sense, there was a downside to this in that >> our web provider Verio's site management front end does not work >> with us resetting the SetHandler in the root. In any case >> most management of this site is done on the command line level. >> >> Not a perfect solution but one that works, I'm open for other >> suggestions. >> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Django users" group. >> To post to this group, send email to django...@googlegroups.com. >> To unsubscribe from this group, send email to >> django-users...@googlegroups.com. >> For more options, visit this group at >> http://groups.google.com/group/django-users?hl=en. >> >> > -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-us...@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.