【问题标题】:Google App Engine aborts on missing environment variable DJANGO_SETTINGS_MODULEGoogle App Engine 因缺少环境变量 DJANGO_SETTINGS_MODULE 而中止
【发布时间】:2023-03-17 03:26:01
【问题描述】:

这是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。该应用程序部署没有问题,并且同步数据库也可以正常工作;数据库和所有必需的表都已到位。

我在日志中显示的错误消息中找到了this reference,但其建议的修复没有帮助。

任何想法可能导致这种情况?

编辑:

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

编辑 2:

我想我做了一点小改进,GAE 现在抱怨:

ImportError: No module named properties

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

【问题讨论】:

  • 尝试在 wsgi.py 文件顶部添加项目路径,请参阅 here 如果添加路径不起作用,请发布您的 wsgi.py
  • 嗯,看起来我使用了不同的目录结构。我只是忽略了外部目录(在您的示例中为pms)并且只在内部目录中工作。我必须承认我没有比我的教程更进一步。对我来说,接下来的事情也是将我现有的项目转换为 GAE 项目。
  • 结构是 AFAIK 创建新 Django 项目时获得的结构。我最终设法让整个事情正常进行(请参阅我的答案),但这绝对是一条非常崎岖的道路。 GAE 日志消息不一定指向实际问题这一事实无济于事。祝你好运!

标签: django google-app-engine


【解决方案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 url。重新部署。完成。

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

老实说,这种方法部分违背了 PyCharm 的优势,后者应该完全支持开箱即用的 Django 和 GAE。它可能需要一些额外的研究和调整才能启动和运行。

任何关于上述内容的 cmets 或见解显然都值得赞赏!

【讨论】:

  • 感谢您回来告诉我们。一旦我将 django 项目转换为 GAE,这对我来说可能会派上用场。
  • 我现在有两个代码库,我需要将它们合并为一个,由 PyCharm 维护并可部署到 GAE。在过去的几天里,我学到了很多东西......并且有过完全绝望的时刻:-\
  • 也许现在是时候写一篇博文了? ;-) 当我试图让 GAE 上的 Django 运行时,我也有同样的感觉。我认为网络上缺乏资源。
猜你喜欢
  • 1970-01-01
  • 2015-11-15
  • 2021-04-14
  • 2015-03-03
  • 1970-01-01
  • 2019-04-02
  • 1970-01-01
  • 2012-08-23
  • 1970-01-01
相关资源
最近更新 更多