Django-compressor: Sie haben die Offline-Komprimierung aktiviert, aber der Schlüssel fehlt im Offline-Manifest

Erstellt am 1. Dez. 2011  ·  17Kommentare  ·  Quelle: django-compressor/django-compressor

Ich bin mir nicht sicher, was dieses Problem ist, aber ich verwende die Offline-Generierung und dieser Fehler tritt auf, nachdem ich den Befehl compress management verwendet und auf die Website zugegriffen habe. Sollte jede dieser CSS-Dateien einen eigenen Schlüssel haben?

Meine Einstellungen:
COMPRESS_URL = STATIC_URL
COMPRESS_ROOT = STATIC_ROOT
COMPRESS_OFFLINE = Wahr
COMPRESS_OFFLINE_MANIFEST = "manifest.json" # Wird im CACHE-Verzeichnis erstellt
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' # FUNKTIONIERT NICHT WTF

Sie haben die Offline-Komprimierung aktiviert, aber der Schlüssel „b68ba4d2116295c56138e439f1b03a03“ fehlt im Offline-Manifest. Möglicherweise müssen Sie "python manage.py compress" ausführen.

Anforderungsmethode: GET
Anfrage-URL: http://127.0.0.1 :8000/
Django-Version: 1.3.1
Ausnahmetyp: OfflineGenerationError
Ausnahmewert:
Sie haben die Offline-Komprimierung aktiviert, aber der Schlüssel „b68ba4d2116295c56138e439f1b03a03“ fehlt im Offline-Manifest. Möglicherweise müssen Sie "python manage.py compress" ausführen.
Ausnahmeort: /srv/www/project/lib/python2.6/site-packages/compressor/templatetags/compress.py in render_offline, Zeile 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>'}

Hilfreichster Kommentar

Das gleiche passiert. Sie haben keinen Inline-Code in compress, und der Schlüssel, der als fehlend gemeldet wird, ist tatsächlich in manifest.json vorhanden
Ich weiß wirklich nicht, was zum Teufel los ist, hat das noch jemand? Alle anderen Kommentare dazu stammen von vor einem Jahr

Alle 17 Kommentare

Welche Version von django_compressor verwendest du?

Was auch immer in PyPI ist. Ich werde versuchen, auf die neueste Entwicklerversion zu aktualisieren. Danke

Ich hatte das gleiche Problem, indem ich Inline-Skripte mit enthaltenen Dateien mischte.

Dies war mein Vorlagencode.

{% 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 %}

Und das waren die Daten, die Django Compressor verwendet hat, um einen Manifestschlüssel zu generieren.

['\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']

Der Schlüssel ist ein Digest der Zeichenfolgendarstellung der Liste der Knoten innerhalb des Blocks {% compress %} . Wenn diese Daten jedes Mal variieren, wenn der Block analysiert wird (siehe die 0x23cf750 -Adresse auf dem URLNode oben), generiert ein Seitenladevorgang immer einen eindeutigen Schlüssel aus dem, was Sie in Ihrer Manifestdatei gespeichert haben.

In meinem Fall löste das Entfernen des Inline-Codes aus dem Block {% compress %} das Problem.

Sie können die Daten verfolgen und in der Funktion get_hexdigest von compress.cache verdauen. Suchen Sie nach Hinweisen in Ihrem Standardausgabe-/Webserver-Fehlerprotokoll.

Ich hoffe es hilft,

Es sollte in der Entwicklungsversion behoben werden, dank des Fixes in #154

Sieht so aus, als ob das Problem ein Skript in einem Inline-Block war. Dies war in der neuesten Entwicklerversion. Danke @viotti

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

Dieses Problem sollte wahrscheinlich geschlossen werden, da es sich, wie bereits erwähnt, um ein Duplikat von Nr. 154 handelt.

Hallo, ich leide unter diesem Problem. Meine settings.py sieht so aus:

### 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'

Alles funktioniert richtig, außer durch Inline-JS-Code, der in der HTML-Datei vorhanden ist. Ich habe mehrere externe css/js-Dateien, die von meiner .html-Datei verlinkt sind. All dies ist mit {% compress css/js %} gut komprimiert, aber wenn ich versuche, den gesamten js-Code zu komprimieren, der in der HTML-Datei gedruckt ist (Code zwischen

Habe immer noch Probleme damit. Es scheint, dass der Hex-Generierungsprozess selbst im Dev-Zweig unter Verwendung von {{ STATIC_URL }} neue Hex-Werte generiert, die keinen Sinn ergeben oder den in manifest.json gespeicherten Hex-Werten entsprechen.

Lösung: Komprimieren Sie js nicht über einen Block. Verwenden Sie zB compress einmal im Master-Template und einmal in den Templates, die jeweils erben. Nachteil: jeweils zwei HTTP-Anfragen für css und js statt einer. Kann auf eins reduziert werden, indem das Master-js/css so verschoben wird, dass es in allen Vorlagen vorhanden ist.

Wäre schön, wenn wir nicht zwischen DRY in Templates und der Reduzierung von HTTP-Anfragen wählen müssten :)

Das gleiche passiert. Sie haben keinen Inline-Code in compress, und der Schlüssel, der als fehlend gemeldet wird, ist tatsächlich in manifest.json vorhanden
Ich weiß wirklich nicht, was zum Teufel los ist, hat das noch jemand? Alle anderen Kommentare dazu stammen von vor einem Jahr

@altryne : Es könnte ein Berechtigungsproblem sein, überprüfen Sie, ob der Webserver/Django-Prozess die Rechte zum Lesen des Manifests hat. Ohne weitere Details kann man nicht viel weiter helfen.

Es stellte sich heraus, dass es eine Django-Sache mit einer 500-Seite war. Bei Offline-Komprimierung versuchte Django, die 500-Seite ohne Kontext zu rendern, was wiederum den 500-Fehler erzeugte.

Das hat wirklich geholfen:
http://chriskief.com/2013/09/18/django-compressor-offlinegenerationerror-and-500-html-handler500/

Hallo zusammen, der Link zu chriskief.com war hilfreich. Allerdings hat es das Problem bei mir nicht gelöst. Es stellte sich heraus, dass ich Django-Template-Variablen wie "{{myvar}}" in meinen Javascripts hatte. Ich habe vergessen, sie zu COMPRESS_OFFLINE_CONTEXT hinzuzufügen, und daher habe ich den Fehler "fehlender Schlüssel" erhalten. Nachdem ich alle meine Javascripts mit Template-Variablen aus dem Compressor genommen hatte, funktionierte alles wieder einwandfrei. Bevor ich einen 500-Fehler bekam, der nicht den Standard-Django-Fehler anzeigte, sondern die Apache-„Fehlkonfigurationsseite“. Ich bin mir noch nicht sicher, ob nur fehlende Definitionen in COMPRESS_OFFLINE_CONTEXT das Problem sind oder ob auch {% url ... %} dieses Problem verursacht.

Ich sehe das in meiner Bereitstellung. Ich benutze so eine Komprimierung

{% 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 %}

könnte es sein, dass compress das sass_src Tag nicht verarbeiten kann?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen