Question

Subdomain Django Settings Conflict

Hi Guys,

I have a site with a set of sub-domains. When I visit one of those sub-domains including the actual domain, it sometimes shows an Internal Server Error on the browser and when I check the apache error.log it tells that it throws an ImportError :

	[Tue Oct 11 06:47:10.999837 2016] [:error] [pid 13114] [client 0.0.0.0:58735] mod_wsgi (pid=13114): Target WSGI script '/var/www/html/api.ai-labs.co/ai_labs_apps/wsgi.py' cannot be loaded as Python module.
	[Tue Oct 11 06:47:11.000377 2016] [:error] [pid 13114] [client 0.0.0.0:58735] mod_wsgi (pid=13114): Exception occurred processing WSGI script '/var/www/html/api.ai-labs.co/ai_labs_apps/wsgi.py'.
	[Tue Oct 11 06:47:11.000478 2016] [:error] [pid 13114] [client 0.0.0.0:58735] Traceback (most recent call last):
	[Tue Oct 11 06:47:11.000552 2016] [:error] [pid 13114] [client 0.0.0.0:58735]   File "/var/www/html/api.ai-labs.co/ai_labs_apps/wsgi.py", line 27, in <module>
	[Tue Oct 11 06:47:11.000675 2016] [:error] [pid 13114] [client 0.0.0.0:58735]     application = get_wsgi_application()
	[Tue Oct 11 06:47:11.000737 2016] [:error] [pid 13114] [client 0.0.0.0:58735]   File "/usr/local/lib/python2.7/dist-packages/django/core/wsgi.py", line 13, in get_wsgi_application
	[Tue Oct 11 06:47:11.000853 2016] [:error] [pid 13114] [client 0.0.0.0:58735]     django.setup()
	[Tue Oct 11 06:47:11.000913 2016] [:error] [pid 13114] [client 0.0.0.0:58735]   File "/usr/local/lib/python2.7/dist-packages/django/__init__.py", line 17, in setup
	[Tue Oct 11 06:47:11.001017 2016] [:error] [pid 13114] [client 0.0.0.0:58735]     configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
	[Tue Oct 11 06:47:11.001076 2016] [:error] [pid 13114] [client 0.0.0.0:58735]   File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 55, in __getattr__
	[Tue Oct 11 06:47:11.001269 2016] [:error] [pid 13114] [client 0.0.0.0:58735]     self._setup(name)
	[Tue Oct 11 06:47:11.001330 2016] [:error] [pid 13114] [client 0.0.0.0:58735]   File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 43, in _setup
	[Tue Oct 11 06:47:11.001395 2016] [:error] [pid 13114] [client 0.0.0.0:58735]     self._wrapped = Settings(settings_module)
	[Tue Oct 11 06:47:11.001450 2016] [:error] [pid 13114] [client 0.0.0.0:58735]   File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 99, in __init__
	[Tue Oct 11 06:47:11.001526 2016] [:error] [pid 13114] [client 0.0.0.0:58735]     mod = importlib.import_module(self.SETTINGS_MODULE)
	[Tue Oct 11 06:47:11.001581 2016] [:error] [pid 13114] [client 0.0.0.0:58735]   File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
	[Tue Oct 11 06:47:11.001689 2016] [:error] [pid 13114] [client 0.0.0.0:58735]     __import__(name)
	[Tue Oct 11 06:47:11.001765 2016] [:error] [pid 13114] [client 0.0.0.0:58735] ImportError: No module named project.settings

I’ll just post the files of the two out of five applications because I really can’t figure out the error and I’m very bad at deploying to the actual server

1st application: accounts This is the 1st application’s apache2/sites-available/accounts.ai-labs.conf

    <VirtualHost *:80>
            # The ServerName directive sets the request scheme, hostname and port that
            # the server uses to identify itself. This is used when creating
            # redirection URLs. In the context of virtual hosts, the ServerName
            # specifies what hostname must appear in the request's Host: header to
            # match this virtual host. For the default virtual host (this file) this
            # value is not decisive as it is used as a last resort host regardless.
            # However, you must set it for any further virtual host explicitly.
            ServerName accounts.ai-labs.co

            # ServerAdmin webmaster@localhost
            DocumentRoot /var/www/html/accounts.ai-labs.co/project

            # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
            # error, crit, alert, emerg.
            # It is also possible to configure the loglevel for particular
            # modules, e.g.
            #LogLevel info ssl:warn

            ErrorLog ${APACHE_LOG_DIR}/error.log
            CustomLog ${APACHE_LOG_DIR}/access.log combined

            # For most configuration files from conf-available/, which are
            # enabled or disabled at a global level, it is possible to
            # include a line for only one particular virtual host. For example the
            # following line enables the CGI configuration for this host only
            # after it has been globally disabled with "a2disconf".
            #Include conf-available/serve-cgi-bin.conf

            <Directory /var/www/html/accounts.ai-labs.co/project>
                    Options Indexes FollowSymLinks
                    AllowOverride All
                    Require all granted
            </Directory>

            Alias /static /var/www/html/accounts.ai-labs.co/project/static
            <Directory /var/www/html/accounts.ai-labs.co/project/static>
                    Require all granted
            </Directory>

            Alias /static /var/www/html/accounts.ai-labs.co/project/media
            <Directory /var/www/html/accounts.ai-labs.co/project/media>
                    Require all granted
            </Directory>

            <Directory /var/www/html/accounts.ai-labs.co/project/project>
                    <Files wsgi.py>
                            Require all granted
                    </Files>
            </Directory>

            WSGIScriptAlias / /var/www/html/accounts.ai-labs.co/project/project/wsgi.py

    </VirtualHost>

This is the 1st application’s wsgi.py

"""
WSGI config for project project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/
"""

import os
import sys
import site

site.addsitedir('/var/www/html/accounts.ai-labs.co/lib/python2.7/site-packages')

sys.path.append('/var/www/html/accounts.ai-labs.co/project')
sys.path.append('/var/www/html/accounts.ai-labs.co/project/project')

from django.core.wsgi import get_wsgi_application
from django.conf import settings

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

activate_env=os.path.expanduser("/var/www/html/accounts.ai-labs.co/bin/activate_this.py")
execfile(activate_env, dict(__file__=activate_env))

application = get_wsgi_application()

2nd application: blogs This is the 2nd application’s apache2/sites-available/blogs.ai-labs.conf

<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        ServerName blogs.ai-labs.co

        # ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/blogs.ai-labs.co

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf

        <Directory /var/www/html/blogs.ai-labs.co>
                Options Indexes FollowSymLinks
                AllowOverride All
                Require all granted
        </Directory>

        Alias /static /var/www/html/blogs.ai-labs.co/static
        <Directory /var/www/html/blogs.ai-labs.co/static>
                Require all granted
        </Directory>

        Alias /static /var/www/html/blogs.ai-labs.co/media
        <Directory /var/www/html/blogs.ai-labs.co/media>
                Require all granted
        </Directory>

        <Directory /var/www/html/blogs.ai-labs.co/ai_labs_blogs>
                <Files wsgi.py>
                        Require all granted
                </Files>
        </Directory>

        WSGIScriptAlias / /var/www/html/blogs.ai-labs.co/ai_labs_blogs/wsgi.py

</VirtualHost>

This is the 2nd application’s wsgi.py

"""
WSGI config for ai_labs_blogs project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/
"""

import os
import sys
import site

site.addsitedir('/var/www/html/.virtualenvs_copy/ai-labs-website-pure-django/local/lib/python2.7/site-packages')

sys.path.append('/var/www/html/blogs.ai-labs.co')
sys.path.append('/var/www/html/blogs.ai-labs.co/ai_labs_blogs')

from django.core.wsgi import get_wsgi_application

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

activate_env=os.path.expanduser("/var/www/html/.virtualenvs_copy/ai-labs-website-pure-django/bin/activate_this.py")
execfile(activate_env, dict(__file__=activate_env))

application = get_wsgi_application()

How do I resolve this?

Subscribe
Share

Submit an answer
You can type!ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.

There are a couple possible solutions for this issue. In general this type of error is related to the directory path wsgi is using and can be corrected in some cases by renaming a folder and in others by adding a line (as mentioned in the link) to your wsgi.py to manually set the path.