Странная проблема при минимизации CSS через django-pipe
Я использую django-pipe для минимизации своего CSS. Все корректно сокращается до тех пор, пока я не использую PipelineCachedStorage, чтобы я мог получить версионные, разрушающие кэш имена файлов. Я получаю следующую ошибку:
ValueError: The file 'img/glyphicons-halflings.png' could not be found with <pipeline.storage.PipelineCachedStorage object at 0x19069d0>
Я собрал все файлы в моем проекте и обнаружил, что этот PNG находится в bootstrap.css, но я не включаю этот файл для минимизации. Вот мои настройки для django-pipe:
PIPELINE_CSS = {
'ab': {
'source_filenames': (
'main.css',
'segment-animation.css',
),
'output_filename' : 'ab.css',
}
}
PIPELINE_YUGLIFY_BINARY = '/home/redacted/ts/redacted/node_modules/yuglify/bin/yuglify'
STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'
Заранее спасибо!
РЕДАКТИРОВАТЬ:
новые настройки для конвейера:
PIPELINE_COMPILERS = (
'pipeline.compilers.less.LessCompiler',
)
PIPELINE_CSS = {
'ab': {
'source_filenames': (
'bootstrap-less/bootstrap.less',
'main.css',
'segment-animation.css',
),
'output_filename' : 'ab.css',
}
}
PIPELINE_YUGLIFY_BINARY = '/home/redacted/ts/redacted/node_modules/yuglify/bin/yuglify'
STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'
2 ответа
Ошибка не полностью связана с Pipeline, а скорее с тем, что у Django CachedStaticFilesStorage
тот PipelineCachedStorage
продолжается. Кэшированное хранилище будет искать ссылки на файлы в ваших CSS-файлах и заменять url('asset-link')
а также @import 'resource-link'
с соответствующей ссылкой на версию с добавленным к ней хешем md5.
Это превратится url('img/glyphicons-halflings.png')
в url('img/glyphicons-halflings.<hash>.png')
, Так что если у вас есть ссылки на активы в ваших файлах CSS, но нет базовых активов, post_process()
из CachedStaticFilesStorage
собирается выбросить эту ошибку.
Вы можете прочитать больше здесь. Я бы порекомендовал скомпилировать меньшую версию начальной загрузки с конвейером django и удалить меньше ненужных компонентов, таких как значки, если вы не хотите включать значки начальной загрузки. Или вы можете включить соответствующие активы.
Я обнаружил, что пакет https://github.com/adamcharnock/django-pipeline-forgiving решает эту проблему с помощью Django CachedStaticFilesStorage / PipelineCachedStorage очень красиво