在GAE服务器上未定义django_settings_module

时间:2012-12-11 23:36:22

标签: python django google-app-engine google-cloud-sql

所以,我知道你们被问过这个问题一百万次,相信我,我想我已经读完了所有这些。我试图将Django民意调查应用程序(在django教程中制作的应用程序)转换为使用谷歌云SQL在谷歌应用程序引擎上运行时,DJANGO_SETTINGS_MODULE是未定义的错误。

以下是谷歌应用引擎日志给我的实际堆栈跟踪:

Traceback (most recent call last):
  File "/base/python27_runtime/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 223, in Handle 
    result = handler(dict(self._environ), self._StartResponse)
  File "/base/python27_runtime/python27_lib/versions/third_party/django-1.4/django/core/handlers/wsgi.py", line 219, in __call__
    self.load_middleware()
  File "/base/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 "/base/python27_runtime/python27_lib/versions/third_party/django-1.4/django/utils/functional.py", line 184, in inner
    self._setup()
  File "/base/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.

尝试在google应用引擎提供的dev_appserver.py上运行时遇到同样的错误,但设法通过添加

来解决这个问题
  env_variables:
    DJANGO_SETTINGS_MODULE: 'DjangoTut.settings'

到app.yaml文件。

我的项目目录如下所示:

  • DjangoTut
    • DjangoTut
      • 初始化的.py
      • settings.py
      • urls.py
      • wsgi.py
    • 轮询
      • 初始化的.py
      • admin.py
      • models.py
      • tests.py
      • urls.py
      • views.py
    • 的app.yaml
    • manage.py

我的app.yaml文件看起来像这样

   application: hochotime
   version: 10
   runtime: python27
   api_version: 1
   threadsafe: true


   libraries:
   - name: django
     version: "1.4"

   builtins:
   - django_wsgi: on

   env_variables:
     DJANGO_SETTINGS_MODULE: 'settings'

其他每个文件都与https://docs.djangoproject.com/en/1.4/intro/tutorial01/

中建议的文件相同

我尝试过添加

    import os
    os.environ['DJANGO_SETTINGS_MODULE'] = 'DjangoTut.settings'

到几乎所有单个python文件的开头但无济于事。我已经尝试将设置文件移动到项目目录而不是app目录,并将所有os.environ['DJANGO_SETTINGS_MODULE']更改为仅指向'settings'。我还尝试直接配置设置,如https://docs.djangoproject.com/en/dev/topics/settings/#using-settings-without-setting-django-settings-module所示,但是,每当我尝试在google服务器上运行它时,我都会收到同样的错误。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您使用的是Django-nonrel吗?如果没有,请查看此appengine ariticle

我会尝试将settings.py移动到与app.yaml相同的目录中。从app.yaml中删除env_variables,你不应该需要它来工作。但是,如果您尚未定义处理程序,则需要定义处理程序(不确定是否列出了整个app.yaml):

  handlers:
- url: /static
  static_dir: static

- url: /.*
  script: main.py

环境设置应该是您设置的wsgi处理程序(在此示例中为main.py),如上面的google文章中所示。

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

希望这能让你走上正确的道路。