【问题标题】:debugging django and caching调试 django 和缓存
【发布时间】:2015-01-21 01:22:59
【问题描述】:

我正在尝试在服务器上调试我的 django 代码。我正在使用多租户模式应用程序,因此通过 wsgi 从服务器运行比使用 manage.py runserver 更容易。

问题是每次我更改一些代码时,view.py,(可能更多只是当我有错误或出错时)我在 Firefox 中点击刷新,每次我点击刷新似乎在显示当前更改之前,先显示过去 3-4 个页面实例。

现在,我尝试了以下方法:

settings.py:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
    }
}

但这似乎不起作用,所以尝试了:

apache 虚拟主机配置

## Added this to stop some weird page caching happening. Appears to be working properly now.
#http://stackoverflow.com/questions/1633684/how-to-disable-django-mod-wsgi-page-caching
WSGIScriptReloading On

# http://stackoverflow.com/questions/11532636/prevent-http-file-caching-in-apache-httpd-mamp
<filesMatch "\.(html|htm|js|css)$">
FileETag None
<ifModule mod_headers.c>
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</ifModule>
</filesMatch>

也有人建议在 Firefox 中尝试私人浏览器,但同样的事情。

我也尝试在 URL 末尾增加一个“?v=1”类型的东西,但仍然没有帮助。

所以,每次我在浏览器中点击刷新时,我无法分辨出缓存过去几页的内容。这真的减慢了我的进度。

任何想法都将不胜感激。

【问题讨论】:

    标签: django apache


    【解决方案1】:

    我很久以前在使用 Chrome 时遇到过同样的问题,这非常令人沮丧。在 Chrome 中对我有用的解决方案是打开开发人员工具,然后在开发工具设置下,确保选中选项Disable cache (while DevTools is open)。在此之后,页面的任何刷新(在开发工具打开时)都将是当前版本。

    Firefox 在它的开发者“工具箱”中有同样的选项。它位于Advanced settings 下,标签为Disable Cache (when toolbox is open)

    【讨论】:

    • 知道这很有帮助,但似乎不是解决方案。我试过了,但仍然遇到类似的问题。实际上,我也只是在 Safari 中尝试过它并且得到了类似的东西,所以......它似乎可能是 apache/wsgi 或 django 问题。如果有其他想法我可以尝试,我很想听听。
    • 太糟糕了,这很容易解决。您能否详细说明the past 3-4 page instances before showing me the current change 的含义?
    • 抱歉耽搁了。我刚才正在看我的 apache error.log 和浏览器(它们是一致的)。我在浏览器上点击重新加载,我的 apache 日志显示“[Tue Nov 04 12:57:26.982460 2014] [:error] [pid 20439] 这里 [Tue Nov 04 12:57:28.046300 2014] [:error] [pid 20149] 重复”。我再次点击重新加载,它显示“Tue Nov 04 12:57:41.686496 2014] [:error] [pid 20523] 在这里”,我再次点击重新加载,我得到“[Tue Nov 04 12:57:48.359550 2014] [ :error] [pid 10995] 这里 [Tue Nov 04 12:57:49.212063 2014] [:error] [pid 10995]
    • 第一个是正确的,然后第二个是旧版本的视图,因为那里没有“recurr”。然后第三个是视图的旧版本,因为我正在打印“
    【解决方案2】:

    其实我觉得这和apache没什么关系。

    由于页面保留在缓存中,我在网站开发过程中遇到了同样的问题。
    当我使用 memcached 时,我曾经执行 service memcached restart 来清空缓存,但这并不方便,因为我必须重新登录才能访问某些页面。
    一段时间后我想出了另一个解决方案:禁用UpdateCacheMiddlewareFetchFromCacheMiddleware 进行开发:

    #setting.py
    if CACHE_PAGES:
        MIDDLEWARE_CLASSES = (
            'django.middleware.cache.UpdateCacheMiddleware',
            'django.middleware.cache.FetchFromCacheMiddleware',
        )
    else:
        MIDDLEWARE_CLASSES = ()
    
    MIDDLEWARE_CLASSES += (
        'django.middleware.common.CommonMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
    )
    

    现在我可以对我的页面进行更改,它们将在刷新后生效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-11
      • 2016-09-08
      • 2010-09-25
      • 2014-11-07
      • 2014-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多