Странная проблема при минимизации 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 очень красиво

Другие вопросы по тегам