2016-04-21 62 views
1

我正在研究Django應用程序,該應用程序使用django-pipeline來處理瀏覽器的文件緩存問題(以及其他好處)。django-pipeline消除了我在Django數據庫緩存中的條目

STATIC_URL = '/static/' 

STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage' 

STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, 'bower'), 
) 

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
    'pipeline.finders.PipelineFinder', 
    'pipeline.finders.CachedFileFinder', 
) 

PIPELINE = {} 
PIPELINE['DISABLE_WRAPPER'] = True 
PIPELINE['JS_COMPRESSOR'] = 'pipeline.compressors.NoopCompressor' 
PIPELINE['CSS_COMPRESSOR'] = 'pipeline.compressors.yuglify.YuglifyCompressor' 

PIPELINE['COMPILERS'] = (
    'pipeline.compilers.sass.SASSCompiler', 
    'pipeline.compilers.es6.ES6Compiler', 
) 

PIPELINE['JAVASCRIPT'] = { 
... 
} 

PIPELINE['STYLESHEETS'] = { 
... 
} 

PIPELINE['SASS_BINARY'] = 'C:\\Ruby22-x64\\bin\\sass.bat' 
PIPELINE['BABEL_BINARY'] = 'c:\\Users\\Foobar\\node_modules\\.bin\\babel.cmd' 

到目前爲止好。最近我們決定使用Django的數據庫緩存(https://docs.djangoproject.com/en/1.9/topics/cache/#database-caching)來緩存一些長時間運行的統計計算結果。

CACHES = { 
    'default': { 
     'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 
     'LOCATION': 'django_dbcache', 
    } 
} 

我執行了createcachetable並創建了表。由於我有自己的有效性檢查,並且可以自己判斷數據是最新的還是需要重新計算,所以我將條目放入此表中,但沒有到期日期。

但令我驚訝的是,當我爲pipeline發出collectstatic時,它清除了該表的內容,並用它自己的staticfiles:{md5code}鍵值填充它。 (在生產中,我看到了它沒有消除所有東西的情況)。但是這使得我的緩存方案無法使用。我似乎無法找到管道文檔中的任何設置如何停止pipeline這樣做。 pipeline在緩存中的緩存條目值非常短,僅包含生成文件的完整路徑。這些條目的到期時間是幾個小時。我不會介意他們在那裏,只是不要擦拭我的東西。


附加說明:我在Windows平臺上(請參閱上面的管道設置),但同樣的事情發生在Linux生產服務器上。


加入到標記的回答:知道,任何人都可以亂用默認緩存+ staticfiles可以毫不客氣地消滅它,它甚至不如我們和其他人分開:

CACHES = { 
    'default': { 
     'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 
     'LOCATION': 'default-cache', 
    }, 
    'staticfiles': { 
     'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 
     'LOCATION': 'static-files', 
    }, 
    'my_dbcache': { 
     'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 
     'LOCATION': 'django_dbcache', 
    } 
} 

回答

2

定義獨立緩存靜態文件將解決問題。 Django默認首先查找「staticfiles」緩存。 示例:

CACHES = { 
'default': { 
    'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 
    'LOCATION': 'django_dbcache', 
}, 
'staticfiles': { 
    'BACKEND': "django.core.cache.backends.locmem.LocMemCache", 
    'LOCATION': 'static-files', 
}