1

这是Google App Engine 和 Django 支持的后续问题:

本教程适用于空项目,但是当我尝试将现有 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。该应用程序部署没有问题,并且同步数据库也可以正常工作;数据库和所有必需的表都已到位。

我发现了对错误消息的引用,如日志中所示,但其建议的修复没有帮助。

有什么想法可能导致这种情况吗?

编辑:

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

编辑2:

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

ImportError: No module named properties

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

4

1 回答 1

1

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

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

我首先使用运行良好的本教程部署了空白项目。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 上运行,因为它对我的特定应用程序至关重要。编辑:我碰到了这个使 templated_email 过时的小宝石,让我可以插入 GAE 邮件系统。

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

显然,对上述任何评论或见解表示赞赏!

于 2013-01-07T14:22:26.497 回答