Google App Engine aborts on missing environment variable DJANGO_SETTINGS_MODULE
Question: This is a follow-up question for [Google App Engine and Django
support](http://stackoverflow.com/questions/14137404/google-app-engine-and-
django-support):

The tutorial works great for an empty project, however when I try to deploy an
existing Django app to Google App Engine, it starts throwing errors:

    
    
    Traceback (most recent call last):
      File "/python27_runtime/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 223, in Handle
        result = handler(dict(self._environ), self._StartResponse)
      File "/python27_runtime/python27_lib/versions/third_party/django-1.4/django/core/handlers/wsgi.py", line 219, in __call__
        self.load_middleware()
      File "/python27_runtime/python27_lib/versions/third_party/django-1.4/django/core/handlers/base.py", line 39, in load_middleware
        for middleware_path in settings.MIDDLEWARE_CLASSES:
      File "/python27_runtime/python27_lib/versions/third_party/django-1.4/django/utils/functional.py", line 184, in inner
        self._setup()
      File "/python27_runtime/python27_lib/versions/third_party/django-1.4/django/conf/__init__.py", line 40, in _setup
        raise ImportError("Settings cannot be imported, because environment variable %s is undefined." % ENVIRONMENT_VARIABLE)
    ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.
    

And a second, which might be related:

    
    
    Traceback (most recent call last):
      File "/python27_runtime/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 223, in Handle
        result = handler(dict(self._environ), self._StartResponse)
      File "/python27_runtime/python27_lib/versions/third_party/django-1.4/django/core/handlers/wsgi.py", line 219, in __call__
        self.load_middleware()
      File "/python27_runtime/python27_lib/versions/third_party/django-1.4/django/core/handlers/base.py", line 39, in load_middleware
        for middleware_path in settings.MIDDLEWARE_CLASSES:
      File "/python27_runtime/python27_lib/versions/third_party/django-1.4/django/utils/functional.py", line 184, in inner
        self._setup()
      File "/python27_runtime/python27_lib/versions/third_party/django-1.4/django/conf/__init__.py", line 42, in _setup
        self._wrapped = Settings(settings_module)
      File "/python27_runtime/python27_lib/versions/third_party/django-1.4/django/conf/__init__.py", line 95, in __init__
        raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e))
    ImportError: Could not import settings 'settings' (Is it on sys.path?): No module named settings
    

I have modified my settings.py as per the tutorial. The app deploys without
problems and the syncdb works as well; the database and all required tables
are in place.

I found [this
reference](https://groups.google.com/forum/?fromgroups=#!topic/google-
appengine/lJorqc0p3MA) to the error message as shown in the log but its
suggested fix did not help.

Any ideas what might be causing this?

**EDIT:**

To shorten this already lengthy question I removed the previously posted
`wsgi.py` file. I had nothing to do with this issue.

**EDIT 2:**

I think I made a small improvement and GAE is now complaining:

    
    
    ImportError: No module named properties
    

I presume there might be an entry missing in my app.yaml file but I have no
clue as to which file that may be. I found some references regarding missing
modules but none that reflect this error message...


Answer: After much trial and error I managed to solve this, albeit partially:

I did not manage to get my existing `PyCharm` project deployed (yet). As I was
keen to have a version running on GAE I went for a different approach and
created a new empty Django project (`project 2`) on my local machine.

I first deployed the blank project using [this
tutorial](http://howto.pui.ch/post/39245389801/tutorial-django-on-appengine-
using-google-cloud-sql) which ran fine. I then copied my `models.py` file from
my existing PyCharm project to `project 2` and added an app called
`properties` which uses the `models.py` file. Initially this went wrong as GAE
kept complaining it could not find my `properties` app. After fiddling about
with it, it suddenly appeared in my admin. I'm not sure what caused the
initial problem but it's working now.

Things crucial to success for me:

I added the following to the very top of my settings.py:

    
    
    import os
    ROOT_PATH = os.path.dirname(__file__)
    

... and then replaced the default `STATIC_ROOT` with:

    
    
    STATIC_ROOT = ROOT_PATH + os.sep + 'static'
    

Then I ran:

    
    
    python manage.py collectstatic
    

from the dir of `project 2`. This collects the required static files which
Django admin uses (image files, css files etc)

So, I currently have a stripped down version of my original project running on
GAE. Things that are missing:

  * The original project used `grappelli` for a more styled admin interface. I'm not sure whether this will run on GAE. **EDIT: Deploying Grappelli on GAE is reasonbly easy. Just copy the Grappelli package to your project dir and run`manage.py collectstatic`. Also add grappelli urls as per documention. Redeploy. Done.**

  * The original project uses a module called `templated_email` to send out templated emails from my `properties` app. Same as `grappelli`: I'm not sure whether this is supported by GAE. Hopefully it will run on GAE as it is crucial for my specific app. **EDIT: I bumped into[this](http://venodesigns.net/2010/07/13/rendering-emails-from-django-templates/) little gem which makes templated_email obsolete and lets me plug into GAE mail system.**

To be honest, this approach partially defies the benefits of PyCharm which
should fully support Django and GAE out of the box. It will probably require
some additional research and tweaking to get that up and running.

Any comments or insights re the above are obviously appreciated!

