Deploying multiple django apps on Apache with mod_wsgi

20,322

Solution 1

This is a problem with the wsgi.py file generated by Django 1.4. It will not work where trying to host two distinct Django instances in the same process, even though in separate sub interpreters.

Change:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "site1.settings")

to:

os.environ["DJANGO_SETTINGS_MODULE"] = "site1.settings"

Or better still use daemon mode and delegate each to run in distinct daemon process groups.

That is, instead of:

WSGIScriptAlias /site1 /var/www/py/site1/site1/wsgi.py
WSGIScriptAlias /site2 /var/www/py/site2/site2/wsgi.py

WSGIPythonPath /var/www/py/site1:/var/www/py/site2

use:

WSGIDaemonProcess site1 python-path=/var/www/py/site1
WSGIScriptAlias /site1 /var/www/py/site1/site1/wsgi.py process-group=site1 application-group=%{GLOBAL}

WSGIDaemonProcess site2 python-path=/var/www/py/site2
WSGIScriptAlias /site2 /var/www/py/site1/site2/wsgi.py process-group=site2 application-group=%{GLOBAL}

UPDATE

Note that there is a whole blog post about this and other causes now.

Solution 2

Graham Dumpleton's response is the one you probably want to read closest, but I would suggest saving yourself a lot of heartburn by hosting your two Djangos at the root of different subdomains rather than at non-root locations on the same domain. There are lots of gotchas for running non-root Django sites IMHO.

Good luck!

Solution 3

Your apps listen on the same port, and there doesn't seem to be a proxy that delegates them to different ones.

You either have to setup VirtualHosts within apache or use Nginx, lighttpd or something else to create a proper proxy

Share:
20,322
Serafeim
Author by

Serafeim

Serafeim S. Papastefanos received his Diploma (2005) and Phd (2010) in EE from the National Technical University of Athens. He has been awarded for his academic progress from State Scholarships Foundation (SSF). His research interests include network management, network protocols, video coding, video indexing and video streaming. Since then he is working as a Software Engineer, starting from automating business processes with the Appian platform (heavy usage of Java/Javascript) and continuing with Django web development. He also keeps a small blog about various programming stuff @ http://spapas.github.io/ SOreadytohelp

Updated on August 04, 2022

Comments

  • Serafeim
    Serafeim over 1 year

    I want to deploy two different django apps in the same host: The first will correspond to the url /site1 and the second to the url /site2. Here's my configuration:

    LoadModule wsgi_module modules/mod_wsgi.so
    
    WSGIScriptAlias /site1 /var/www/py/site1/site1/wsgi.py
    WSGIScriptAlias /site2 /var/www/py/site2/site2/wsgi.py
    
    WSGIPythonPath /var/www/py/site1:/var/www/py/site2
    
    <Directory "/var/www/py/site1/site1">
    <Files wsgi.py>
    Order deny,allow
    Allow from all
    </Files>
    </Directory>
    
    <Directory "/var/www/py/site2/site2">
    <Files wsgi.py>
    Order deny,allow
    Allow from all
    </Files>
    </Directory>
    
    

    Also here's the wsgi.py file for both applications

    import os
    import sys
    
    path = '/var/www/py/site1'
    if path not in sys.path:
        sys.path.append(path)
    
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "site1.settings")
    from django.core.wsgi import get_wsgi_application
    application = get_wsgi_application()
    
    

    Now, here's my problem. When I go to my server, let's say http://app1.sites.gr/site1 it some times loads site1, and some other times it loads site2 !!!! The same goes when I visit http://app1.sites.gr/site2 ... Sometiems I get the welcome page for site1, sometimes I get the welcome page for site2 ! I am hitting F5 and getting different welcome pages. I have checked everything for the previous hours and did not find anything strange...

    Please, tell me what could be the problem before I go crazy ...

    Thanks !