【问题标题】:App engine build aborts on error Environment variable DJANGO_SETTINGS_MODULE is undefined应用引擎构建因错误环境变量 DJANGO_SETTINGS_MODULE 未定义而中止
【发布时间】:2015-03-03 16:22:17
【问题描述】:

我正在尝试使用他们的推送部署教程https://cloud.google.com/tools/repo/push-to-deploy-quickstart 将 django 1.6 项目部署到谷歌应用引擎。该项目在本地工作得很好,但是当我推送项目时,当导入 django 模型时,应用程序引擎似乎回退到 django 0.96,如下面的错误所示。为什么会这样?

======================================================================
    ERROR: Failure: EnvironmentError (Environment variable DJANGO_SETTINGS_MODULE is undefined.)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "/usr/lib/python2.7/dist-packages/nose/loader.py", line 414, in loadTestsFromName
        addr.filename, addr.module)
      File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 47, in importFromPath
        return self.importFromDir(dir_path, fqname)
      File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 94, in importFromDir
        mod = load_module(part_fqname, fh, filename, desc)
      File "/var/jenkins/workspace/mango_app/apps/merchant/__init__.py", line 1, in <module>
        from gateways import *
      File "/var/jenkins/workspace/mango_app/apps/merchant/gateways/__init__.py", line 1, in <module>
        from plugnpay import PlugnPay
      File "/var/jenkins/workspace/mango_app/apps/merchant/gateways/plugnpay.py", line 5, in <module>
        from apps.merchant.exceptions import MissingDataError
      File "/var/jenkins/workspace/mango_app/apps/merchant/__init__.py", line 1, in <module>
        from gateways import *
      File "/var/jenkins/workspace/mango_app/apps/merchant/gateways/__init__.py", line 1, in <module>
        from plugnpay import PlugnPay
      File "/var/jenkins/workspace/mango_app/apps/merchant/gateways/plugnpay.py", line 6, in <module>
        from apps.merchant.lib.api import PostGateway
      File "/var/jenkins/workspace/mango_app/apps/merchant/lib/api.py", line 6, in <module>
        from apps.merchant.gateways.core import Gateway
      File "/var/jenkins/workspace/mango_app/apps/merchant/gateways/core.py", line 7, in <module>
        from apps.merchant.gateways.models import PlugnpayResponseModel
      File "/var/jenkins/workspace/mango_app/apps/merchant/gateways/models.py", line 1, in <module>
        from django.db import models
      File "/google-cloud-sdk/platform/google_appengine/lib/django-0.96/django/db/__init__.py", line 7, in <module>
        if not settings.DATABASE_ENGINE:
      File "/google-cloud-sdk/platform/google_appengine/lib/django-0.96/django/conf/__init__.py", line 28, in __getattr__
        self._import_settings()
      File "/google-cloud-sdk/platform/google_appengine/lib/django-0.96/django/conf/__init__.py", line 53, in _import_settings
        raise EnvironmentError, "Environment variable %s is undefined." % ENVIRONMENT_VARIABLE
    EnvironmentError: Environment variable DJANGO_SETTINGS_MODULE is undefined.

app.yaml

application: instance-id
version: 1
runtime: python27
api_version: 1
threadsafe: true

env_variables:
  DJANGO_SETTINGS_MODULE: 'myproject.settings'

handlers:
- url: .*
  script: myproject.wsgi.application

wsgi.py

import sys


sys.path.insert(0,'./Lib/site-packages')
sys.path.insert(1,'./apps')

import os


#Delete current django version in production
for key in [key for key in sys.modules if key.startswith('django')]:
  del sys.modules[key]


from django.core.wsgi import get_wsgi_application
_application = get_wsgi_application()


def application(environ, start_response):
    try:
        os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'
    except Exception:
        pass

    return _application(environ, start_response)

我也尝试将这行代码放在 appengine_config.py 中:

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

目录结构

C:.
│   .gitignore
│   app.yaml
│   appengine_config.py
│   manage.py
│   requirements.txt
│   __init__.py
├───apps
├───lib
│   __init__.py
├───myproject
│   app.py
│   settings.py
│   urls.py
│   views.py
│   wsgi.py
│   __init__.py

【问题讨论】:

    标签: python django google-app-engine


    【解决方案1】:

    App Engine 不包含 Django 1.6。您需要将其添加到您的项目中并上传。或者,您可以将 Django 1.5 与 GAE 一起使用,只需将其添加到您的 app.yaml:

    libraries:
    - name: django
      version: "1.5"
    

    否则,您将无法使用几年前 GAE 默认的旧版本 (0.96)。如果您打算使用自己的 django,而不是 GAE 附带的 1.5,我建议使用 django-nonrel。

    通过执行上述任一操作,您可以消除在生产中(在 wsgi.py 中)删除 django,这很可能会导致您的错误。

    【讨论】:

      猜你喜欢
      • 2012-07-14
      • 2023-03-17
      • 2014-06-28
      • 2020-03-19
      • 1970-01-01
      • 2017-05-04
      • 1970-01-01
      • 2012-08-23
      • 1970-01-01
      相关资源
      最近更新 更多