这是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文件中可能缺少一个条目,但我不知道哪个文件可能是。我找到了一些关于丢失模块的参考资料,但没有一个反映这个错误信息...
答案 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。可能需要进行一些额外的研究和调整才能使其正常运行。
上述任何评论或见解显然都很受欢迎!