Google App Engine在缺少环境变量DJANGO_SETTINGS_MODULE时中止

时间:2013-01-06 22:49:12

标签: django google-app-engine

这是Google App Engine and Django support的后续问题:

本教程适用于空项目,但是当我尝试将现有的Django应用程序部署到Google App Engine时,它会开始抛出错误:

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.

还有一秒可能与之相关:

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

我根据教程修改了settings.py.该应用程序部署没有问题,syncdb也可以正常工作;数据库和所有必需的表都已到位。

我在错误消息中找到this reference,如日志中所示,但其建议的修复无效。

任何可能导致此问题的想法?

修改

为了缩短这个已经很长的问题,我删除了之前发布的wsgi.py文件。我与这个问题无关。

编辑2:

我认为我做了一个小改进,GAE现在抱怨:

ImportError: No module named properties

我认为我的app.yaml文件中可能缺少一个条目,但我不知道哪个文件可能是。我找到了一些关于丢失模块的参考资料,但没有一个反映这个错误信息...

1 个答案:

答案 0 :(得分:1)

经过多次试验和错误后,我设法解决了这个问题,尽管是部分原因:

我没有设法部署现有的PyCharm项目。由于我热衷于在GAE上运行一个版本,我采用了不同的方法,并在我的本地机器上创建了一个新的空Django项目(project 2)。

我首先使用this tutorial部署了空白项目,运行正常。然后,我将models.py文件从现有的PyCharm项目复制到project 2,并添加了一个名为properties的应用程序,该应用程序使用models.py文件。最初这出错了,因为GAE一直在抱怨找不到我的properties应用。在摆弄它之后,它突然出现在我的管理员中。我不确定是什么原因引起了最初的问题,但它现在正在运作。

对我来说成功至关重要的事情:

我将以下内容添加到我的settings.py:

的最顶部
import os
ROOT_PATH = os.path.dirname(__file__)

...然后将默认STATIC_ROOT替换为:

STATIC_ROOT = ROOT_PATH + os.sep + 'static'

然后我跑了:

python manage.py collectstatic

来自project 2的目录。这会收集Django管理员使用的所需静态文件(图像文件,css文件等)

所以,我目前有一个在GAE上运行的原始项目的精简版本。缺少的东西:

  • 原始项目使用grappelli来创建更样式的管理界面。我不确定这是否会在GAE上运行。 编辑:在GAE上部署Grappelli非常容易。只需将Grappelli包复制到项目目录并运行manage.py collectstatic即可。还可以根据文档添加grappelli网址。重新部署。完成。

  • 原始项目使用名为templated_email的模块从我的properties应用发送模板化电子邮件。与grappelli相同:我不确定GAE是否支持此功能。希望它能在GAE上运行,因为它对我的特定应用至关重要。 编辑:我碰到了this小宝石,这使得templated_email过时了,让我插入GAE邮件系统。

老实说,这种方法部分地违背了PyCharm的好处,它应该完全支持开箱即用的Django和GAE。可能需要进行一些额外的研究和调整才能使其正常运行。

上述任何评论或见解显然都很受欢迎!