Django-compressor не находит блоки для сжатия в GitHub Action
У меня есть проект Django, который использует django-compressor для минификации и конкатенации CSS файлов, используя автономное сжатие. Я еще не ставил его на сервер, но когда я запускаю manage.py compress
в GitHub Action, перед запуском тестов, он не может найти блоки {% compress %}
, хотя может найти содержащий их шаблон.
У меня есть один шаблон, который использует CSS файлы, templates/myapp/layouts/base.html
:
<!DOCTYPE html>
{% load compress static %}
<html lang="en">
<head>
<!-- ... -->
{% compress css file global %}
<link rel="stylesheet" href="{% static 'oohdir/css/global/variables.css' %}">
<link rel="stylesheet" href="{% static 'oohdir/css/global/reset.css' %}">
<link rel="stylesheet" href="{% static 'oohdir/css/global/form.css' %}">
<!-- etc -->
{% endcompress %}
При локальном запуске сайта я могу иметь такие настройки Django:
DEBUG = False
COMPRESS_ENABLED = True
COMPRESS_OFFLINE = True
и когда я запускаю manage.py compress
, он генерирует один файл CSS, как и ожидалось, в static_collected/CACHE/CSS/
. Этот файл связан с HTML, когда я просматриваю страницы в браузере (используя manage.py runserver --insecure
).
Но когда я запускаю свой GitHub Action, многие тесты не работают из-за отсутствия файла, который django-compressor не сгенерировал.
Если я запускаю manage.py compress --verbosity 2
в Action, я вижу, что он находит правильный шаблон среди всех остальных:
Found templates:
...
myapp/inc/form_field.html
myapp/layouts/base.html
admin/tree_list.html
...
Но он не считает, что в нем есть что сжимать:
Compressing... done
Compressed 0 block(s) from 9 template(s) for 1 context(s).
Это должно быть 1 block(s)
. Я в тупике.
Благодаря шпаргалке Дэна я нашел проблему: в своем GitHub Action я запускал manage.py compress
перед manage.py collectstatic
- думая, что collectstatic
нужно будет собрать сгенерированный, сжатый файл(ы) CSS.
Но это должно быть наоборот, чтобы все статические файлы были собраны на месте, прежде чем compress
сможет сделать свою работу над ними.
Теперь шаг моих тестов выглядит примерно так:
- name: Run Tests
run: |
./manage.py collectstatic --verbosity=0 --noinput
./manage.py compress --verbosity=0
flake8 myproject
black . --check
coverage run ./manage.py test
env:
[all my env vars]