【问题标题】:How should I import django.middleware classes in Google App Engine project?我应该如何在 Google App Engine 项目中导入 django.middleware 类?
【发布时间】:2012-11-20 09:15:23
【问题描述】:

我正在尝试将我的 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',
)

感谢您对此进行调查。

【问题讨论】:

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


    【解决方案1】:

    使用

    安装内存缓存
    pip install python-memcached
    

    【讨论】:

    • pip install python3-memcached 用于 python 3。
    • @AnkitPopli 命令 python setup.py egg_info 失败,错误代码 1 在 /tmp/pip_build_root/python3-memcached
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      您正在使用 GAE 为 django 1.4 提供的库 但是,您还导入了 djangoappengine,它是为 django-nonrel 设计的。

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-15
        • 2019-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-12
        相关资源
        最近更新 更多