Django-compressor: У вас включено автономное сжатие, но ключ отсутствует в автономном манифесте

Созданный на 1 дек. 2011  ·  17Комментарии  ·  Источник: django-compressor/django-compressor

Я не уверен, в чем проблема, но я использую автономную генерацию, и эта ошибка возникает после использования команды управления сжатием и доступа к веб-сайту. Должен ли каждый из этих файлов css иметь свой собственный ключ?

Мои настройки:
COMPRESS_URL = STATIC_URL
COMPRESS_ROOT = STATIC_ROOT
COMPRESS_OFFLINE = Истина
COMPRESS_OFFLINE_MANIFEST = "manifest.json" # Создается в каталоге CACHE
COMPRESS_CSS_FILTERS = ['compressor.filters.css_default.CssAbsoluteFilter','compressor.filters.cssmin.CSSMinFilter']
COMPRESS_YUI_BINARY = os.path.join(PROJECT_ROOT, 'bin/yui.sh')
COMPRESS_JS_FILTERS = ['compressor.filters.closure.ClosureCompilerFilter']
COMPRESS_CLOSURE_COMPILER_BINARY = os.path.join(PROJECT_ROOT, 'bin/closure.sh')
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = "--language_in=ECMASCRIPT5"

COMPRESS_STORAGE = 'compressor.storage.GzipCompressorFileStorage' # НЕ РАБОТАЕТ WTF

У вас включено автономное сжатие, но ключ «b68ba4d2116295c56138e439f1b03a03» отсутствует в автономном манифесте. Возможно, вам придется запустить «python manage.py compress».

Метод запроса: ПОЛУЧИТЬ
URL запроса: http://127.0.0.1 :8000/
Версия Джанго: 1.3.1
Тип исключения: OfflineGenerationError
Значение исключения:
У вас включено автономное сжатие, но ключ «b68ba4d2116295c56138e439f1b03a03» отсутствует в автономном манифесте. Возможно, вам придется запустить «python manage.py compress».
Расположение исключения: /srv/www/project/lib/python2.6/site-packages/compressor/templatetags/compress.py в render_offline, строка 56.

Variable    Value
forced  
False
self    
<compressor.templatetags.compress.CompressorNode object at 0x966764c>
compressor  
<compressor.js.JsCompressor object at 0x966732c>
key 
'b68ba4d2116295c56138e439f1b03a03'
offline_manifest    
{u'32e9172ad82f3b6d238cc7423a7f10c7': u'<link rel="stylesheet" href="/static/CACHE/css/a50381ce7ba9.css" type="text/css" media="screen" /><link rel="stylesheet" href="/static/CACHE/css/62afac347423.css" type="text/css" /><link rel="stylesheet" href="/static/CACHE/css/f336d54a5423.css" type="text/css" media="screen" /><link rel="stylesheet" href="/static/CACHE/css/5cf783d07673.css" type="text/css" />',
 u'b1bd8f68f96dfa53380b10881f8eb691': u'<script type="text/javascript" src="/static/CACHE/js/19522c6ee302.js"></script>',
 u'c6d6d2948d18188277e7a987c71e2bc3': u'<script type="text/javascript" src="/static/CACHE/js/90bda37980a5.js"></script>',
 u'dbe0b22545cd64193d8a875c3226b1ea': u'<script type="text/javascript" src="/static/CACHE/js/71056921eb77.js"></script>'}

Самый полезный комментарий

Пусть случится то же самое. У вас нет встроенного кода в сжатии, а ключ, который сообщает об отсутствии, на самом деле существует в manifest.json.
Действительно не знаю, что, черт возьми, происходит, у кого-нибудь еще есть это? Все остальные комментарии по этому поводу годичной давности.

Все 17 Комментарий

Какую версию django_compressor вы используете?

Что бы ни было в PyPI. Я попробую обновиться до последней версии dev. Спасибо

У меня была такая же проблема, когда я смешивал встроенные скрипты с включенными файлами.

Это был мой код шаблона.

{% compress js %}
    <script type="text/javascript">
    xhr_cidades = '{% url cidades_consulta %}';
    xhr_imoveis = '{% url imoveis_consulta %}';
    xhr_empresas = '{% url empresas_consulta %}';
    xhr_empreend = '{% url empreendimentos_consulta %}';
    </script>

    <script type="text/javascript" src="{{ STATIC_URL }}jquery-1.6.1.min.js"></script>
    <script type="text/javascript" src="{{ STATIC_URL }}jquery-ui/jquery-ui-1.8.13.custom.min.js"></script>
    <script type="text/javascript" src="{{ STATIC_URL }}jquery-ui/jquery-ui-datepicker-pt-BR.min.js"></script>
    <script type="text/javascript" src="{{ STATIC_URL }}jquery-ui/jquery-ui-combobox.min.js"></script>
    <script type="text/javascript" src="{{ STATIC_URL }}jquery-meiomask-1.1.3.min.js"></script>
    <script type="text/javascript" src="{{ STATIC_URL }}jquery-scrollto-1.4.2.min.js"></script>
    <script type="text/javascript" src="{{ STATIC_URL }}jquery-dotimeout-1.0.min.js"></script>
    <script type="text/javascript" src="{{ STATIC_URL }}base.js"></script>
{% endcompress %}

И это были данные, которые компрессор Django использовал для создания ключа манифеста.

['\n    <script type="text/javascript">\n        xhr_cidades = \'', '<django.template.defaulttags.URLNode object at 0x23cf1d0>',
 "';\n        xhr_imoveis = '", '<django.template.defaulttags.URLNode object at 0x23cf750>', "';\n        xhr_empresas = '",
 '<django.template.defaulttags.URLNode object at 0x23cf210>', "';\n        xhr_empreend = '",
 '<django.template.defaulttags.URLNode object at 0x23cf2d0>', '\';\n    </script>\n\n    <script type="text/javascript" src="',
 '<Variable Node: STATIC_URL>', 'jquery-1.6.1.min.js"></script>\n    <script type="text/javascript" src="', '<Variable Node:
 STATIC_URL>', 'jquery-ui/jquery-ui-1.8.13.custom.min.js"></script>\n    <script type="text/javascript" src="', '<Variable
 Node: STATIC_URL>', 'jquery-ui/jquery-ui-datepicker-pt-BR.min.js"></script>\n    <script type="text/javascript" src="',
 '<Variable Node: STATIC_URL>', 'jquery-ui/jquery-ui-combobox.min.js"></script>\n    <script type="text/javascript" src="',
 '<Variable Node: STATIC_URL>', 'jquery-meiomask-1.1.3.min.js"></script>\n    <script type="text/javascript" src="',
 '<Variable Node: STATIC_URL>', 'jquery-scrollto-1.4.2.min.js"></script>\n    <script type="text/javascript" src="', '<Variable
 Node: STATIC_URL>', 'base.js"></script>\n']

Ключ представляет собой дайджест строкового представления списка узлов внутри блока {% compress %} . Если эти данные меняются каждый раз, когда анализируется блок (см. адрес 0x23cf750 в URLNode выше), загрузка страницы всегда будет генерировать ключ, отличный от того, что вы сохранили в файле манифеста.

В моем случае удаление встроенного кода из блока {% compress %} решило проблему.

Вы можете отслеживать данные и дайджест в функции get_hexdigest компрессора.cache . Ищите подсказки в журнале ошибок вашего стандартного вывода/веб-сервера.

Надеюсь, поможет,

Это должно быть исправлено в разрабатываемой версии, благодаря исправлению, которое было в #154.

Похоже, проблема заключалась в включении скрипта внутри встроенного блока. Это было в последней версии для разработчиков. Спасибо @viotti.

{% compress js inline %}
<script type="text/javascript" src="/static/js/pages/calculator.js"></script>

Этот вопрос, вероятно, следует закрыть, как уже отмечалось здесь ранее, это дубликат № 154.

Привет, я страдаю этой проблемой. Мой settings.py выглядит так:

### COMPRESSION - django_compressor
COMPRESS_ENABLED = True
COMPRESS_OFFLINE = True
COMPRESS_PARSER = 'compressor.parser.LxmlParser'
COMPRESS_CSS_FILTERS = [
    'compressor.filters.css_default.CssAbsoluteFilter',
    'compressor.filters.cssmin.CSSMinFilter',
    ]
COMPRESS_JS_FILTERS = [
    'compressor.filters.closure.ClosureCompilerFilter',
]

COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar /path/to/compiler.jar'

Все работает правильно, за исключением встроенного кода js, присутствующего в файле .html. У меня есть несколько внешних файлов css/js, связанных с моим .html. Все это хорошо сжимается с помощью {% compress css/js %}, но когда я пытаюсь сжать весь код js, напечатанный в файле .html (код между

С этим еще есть проблемы. Похоже, что даже в ветке dev, используя {{ STATIC_URL }}, процесс генерации шестнадцатеричного кода генерирует новые шестнадцатеричные значения, которые не имеют никакого смысла или не соответствуют шестнадцатеричным, сохраненным в manifest.json.

Решение: не сжимайте js, охватывая блок. Например, используйте сжатие один раз в главном шаблоне и один раз в шаблонах, которые каждый наследует. Минус: по два http запроса для css и js вместо одного. Можно уменьшить до одного, переместив мастер js/css во все шаблоны.

Было бы неплохо, если бы нам не приходилось выбирать между DRY в шаблонах и сокращением http-запросов :)

Пусть случится то же самое. У вас нет встроенного кода в сжатии, а ключ, который сообщает об отсутствии, на самом деле существует в manifest.json.
Действительно не знаю, что, черт возьми, происходит, у кого-нибудь еще есть это? Все остальные комментарии по этому поводу годичной давности.

@altryne : это может быть проблема с разрешениями, убедитесь, что процесс веб-сервера / django имеет права на чтение манифеста. Не могу помочь намного больше без более подробной информации.

Оказывается, это была вещь Django с 500 страницами. При автономном сжатии django пытался отобразить страницу 500 без контекста, что само по себе создало ошибку 500.

Это действительно помогло:
http://chriskief.com/2013/09/18/django-compressor-offlinegenerationerror-and-500-html-handler500/

Привет всем, ссылка на chriskief.com была полезной. Однако это не решило проблему для меня. Оказалось, что в моих javascripts были переменные шаблона django, такие как «{{myvar}}». Я забыл добавить их в COMPRESS_OFFLINE_CONTEXT и, следовательно, получил ошибку отсутствующего ключа. Как только я вынул все свои javascripts с переменными шаблона из компрессора, все снова заработало нормально. Прежде чем я получил ошибку 500, которая отображала не стандартную ошибку django, а «страницу неправильной конфигурации» Apache. Я еще не уверен, являются ли проблемой только отсутствующие определения в COMPRESS_OFFLINE_CONTEXT или же {% url ... %} вызывает эту проблему.

Я вижу это в своем развертывании. Я использую компресс так

{% compress css %}
<link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
<link rel="stylesheet" type="text/css" href="{% static 'css/bootstrap-social.css' %}">
<link rel="stylesheet" type="text/css" href="{% sass_src 'css/base.scss' %}">
{% endcompress %}

может быть, сжатие не может обработать тег sass_src ?

Была ли эта страница полезной?
0 / 5 - 0 рейтинги