Thursday, February 28, 2019

Django 1.11: AttributeError: 'module' object has no attribute 'setup_environ'

This is related to a bug I raised against app engine while tying to migrate from django 1.5 to 1.11.

The issue is I have an app running on app engine using django 1.5.
Recently I was making a number of major updates to the app and decided to convert to django 1.11 as part of that update.

Everything seemed to work fine on my local dev_appserver, but when I deployed it to app engine, it threw an error similar to this...

ERROR    2019-02-28 19:01:49,710 wsgi.py:263]
Traceback (most recent call last):
  File "/home/cshiek/Programs/google-cloud-sdk-1.9.83/platform/google_appengine/google/appengine/runtime/wsgi.py", line 240, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/home/cshiek/Programs/google-cloud-sdk-1.9.83/platform/google_appengine/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
    handler, path, err = LoadObject(self._handler)
  File "/home/cshiek/Programs/google-cloud-sdk-1.9.83/platform/google_appengine/google/appengine/runtime/wsgi.py", line 96, in LoadObject
    __import__(cumulative_path)
INFO     2019-02-28 19:01:49,720 module.py:861] default: "GET /Common?action=%5B%22logout%22%5D HTTP/1.1" 500 -
  File "/home/cshiek/Programs/google-cloud-sdk-1.9.83/platform/google_appengine/google/appengine/ext/django/main.py", line 82, in <module>
    management.setup_environ(settings, original_settings_path=settings_path)
AttributeError: 'module' object has no attribute 'setup_environ'


I downloaded the app back to my local development server and built a clean python environment using only the exact modules I needed - and then I saw the same setup_environ error.
The module indicated has the following code which is throwing the error.

try:
  settings = __import__(settings_path)
  management.setup_environ(settings, original_settings_path=settings_path)
except ImportError:
    pass


I changed the code to 
try:
  settings = __import__(settings_path)
  management.setup_environ(settings, original_settings_path=settings_path)
except AttributeError:
  django.setup()
except ImportError:
    pass


And everything works fine.
My problem is that the changed module appears to be inside the google-cloud-sdk and therefore I cannot change it in production.

My app.yaml point to django 1.11

I've searched the net and no one seems to have encountered this problem before...there is a lot about setup_environ, but nothing that addresses this particular issue.

I even raised a ticket against app engine (https://issuetracker.google.com/issues/124539522) but received a reply that it was a django problem.

Question is - has anyone else come across this problem in the app engine environment - and how did you resolve it?

Thanks!
/Chi







--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/853d28f7-9eab-450f-81bf-f05343939da1%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment