我应该如何在Google App Engine项目中导入django.middleware类?

时间:2012-11-20 09:15:23

标签: python django google-app-engine memcached middleware

我正在尝试将我的django项目部署到GAE。在使用appcfg.py进行部署后,我在GAE中遇到此错误。有人知道如何解决这个问题吗?

Traceback (most recent call last):
  File "/base/python27_runtime/python27_lib/versions/1/google/appengine/runtime 
  /wsgi.py", line 223, in Handle
  result = handler(dict(self._environ), self._StartResponse)
  File "/base/python27_runtime/python27_lib/versions/third_party/django-1.4/django
  /core/handlers/wsgi.py", line 219, in __call__
  self.load_middleware()
  File "/base/python27_runtime/python27_lib/versions/third_party/django-1.4/django
  /core/handlers/base.py", line 47, in load_middleware
  raise exceptions.ImproperlyConfigured('Error importing middleware %s: "%s"' % 
  (mw_module, e))

  ImproperlyConfigured: Error importing middleware django.middleware.cache: "No module 
  named memcache"

下一个代码显示了如何在我的project.settings中导入中间件类:

from djangoappengine.settings_base import *

....

MIDDLEWARE_CLASSES = (
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)

感谢您对此进行调查。

3 个答案:

答案 0 :(得分:5)

使用

安装内存缓存
pip install python-memcached

答案 1 :(得分:1)

您的缓存后端可能配置为使用memcache。 Memcache现在可用于google-appengine。您需要使用appengine api google.appengine.api.memcache中的memcache包装器。

您需要使用带有django的custom cache backend。您可能需要实现自己的django缓存后端,该后端使用appengine的memcache api。实现django后端应该是微不足道的,因为appengine api中的函数很容易映射到django缓存后端。将后端编写为参考时,您可以使用django.core.cache.backends.MemcachedCache

答案 2 :(得分:0)

你有一个奇怪的配置,我怀疑你会遇到很多问题。

您正在为django 1.4使用GAE提供的库 但是,你也有djangoappengine进口,这是专为django-nonrel设计的。

我不认为GAE提供的库和django-nonrel一起工作得很好。我怀疑你可能会遇到很多奇怪的错误。

如果您使用纯django-nonrel,我认为您的中间件设置正常。

这是否在本地工作,并且只在部署时中断?在这种情况下,您最有可能在本地使用django-nonrel,但是您没有部署它 - 因此在部署时,它使用的是GAE提供的版本。

确保django-nonrel位于项目文件夹中。并且不要在你的app.yaml中启用django 1.4。