Django-compressor: La compression hors ligne est activée, mais la clé est manquante dans le manifeste hors ligne

Créé le 1 déc. 2011  ·  17Commentaires  ·  Source: django-compressor/django-compressor

Je ne sais pas quel est ce problème, mais j'utilise la génération hors ligne et cette erreur se produit après avoir utilisé la commande de gestion de compression et accédé au site Web. Est-ce que chacun de ces fichiers CSS devrait avoir sa propre clé ?

Mes paramètres:
COMPRESS_URL = STATIC_URL
COMPRESS_ROOT = STATIC_ROOT
COMPRESS_OFFLINE = Vrai
COMPRESS_OFFLINE_MANIFEST = "manifest.json" # Est créé dans le répertoire 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' # NE FONCTIONNE PAS WTF

La compression hors ligne est activée, mais la clé "b68ba4d2116295c56138e439f1b03a03" est manquante dans le manifeste hors ligne. Vous devrez peut-être exécuter "python manage.py compress".

Méthode de requête : GET
URL de la demande : http://127.0.0.1 :8000/
Version Django : 1.3.1
Type d'exception : OfflineGenerationError
Valeur d'exception :
La compression hors ligne est activée, mais la clé "b68ba4d2116295c56138e439f1b03a03" est manquante dans le manifeste hors ligne. Vous devrez peut-être exécuter "python manage.py compress".
Emplacement de l'exception : /srv/www/project/lib/python2.6/site-packages/compressor/templatetags/compress.py dans render_offline, ligne 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>'}

Commentaire le plus utile

Que la même chose se produise. Ne pas avoir de code en ligne dans compress, et la clé qui manque dans les rapports existe en fait dans manifest.json
Je ne sais vraiment pas ce qui se passe, quelqu'un d'autre l'a-t-il encore ? Tous les autres commentaires à ce sujet datent d'il y a un an

Tous les 17 commentaires

Quelle version de django_compressor utilisez-vous ?

Tout ce qui est dans PyPI. Je vais essayer de mettre à jour vers la dernière version de développement. Merci

J'ai eu le même problème en mélangeant des scripts en ligne avec des fichiers inclus.

C'était mon code de modèle.

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

Et ce sont les données que le compresseur Django utilisait pour générer une clé manifeste.

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

La clé est un résumé de la représentation sous forme de chaîne de la liste des nœuds à l'intérieur du bloc {% compress %} . Si ces données varient à chaque fois que le bloc est analysé (voir l'adresse 0x23cf750 sur l'URLNode ci-dessus), un chargement de page générera toujours une clé distincte de ce que vous avez stocké dans votre fichier manifeste.

Dans mon cas, la suppression du code en ligne du bloc {% compress %} a résolu le problème.

Vous pouvez tracer les données et digérer dans la fonction get_hexdigest de compresseur.cache . Recherchez des indices dans votre journal d'erreurs standard de sortie/serveur Web.

J'espère que ça aide,

Il devrait être corrigé dans la version de développement, grâce au correctif fourni dans le #154

On dirait que le problème était un script inclus dans un bloc en ligne. C'était sur la dernière version de développement. Merci @viotti

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

Ce problème devrait probablement être fermé, comme indiqué précédemment ici, il s'agit d'un doublon de # 154.

Salut, je souffre de ce problème. Mon settings.py ressemble à ceci :

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

Tout fonctionne correctement, sauf par le code js en ligne présent dans le fichier .html. J'ai plusieurs fichiers externes css/js liés à partir de mon .html. Tout cela est bien compressé avec {% compress css/js %}, mais quand j'essaie de compresser tout le code js imprimé dans le fichier .html (code entre

Toujours des problèmes avec ça. Il semble que même dans la branche de développement, en utilisant {{ STATIC_URL }}, le processus de génération d'hexagones génère de nouveaux hexagones qui n'ont aucun sens ou correspondent aux hexagones enregistrés dans manifest.json.

Solution : ne pas compresser js sur un bloc. Par exemple, utilisez compress une fois dans le modèle principal et une fois dans les modèles dont chacun hérite. Inconvénient : deux requêtes http pour css et js chacune, au lieu d'une. Peut être réduit à un en déplaçant le master js/css pour qu'il soit dans tous les templates.

Ce serait bien si nous n'avions pas à choisir entre DRY dans les modèles et réduire les requêtes http :)

Que la même chose se produise. Ne pas avoir de code en ligne dans compress, et la clé qui manque dans les rapports existe en fait dans manifest.json
Je ne sais vraiment pas ce qui se passe, quelqu'un d'autre l'a-t-il encore ? Tous les autres commentaires à ce sujet datent d'il y a un an

@altryne : il peut s'agir d'un problème de permissions, vérifiez que le processus webserver / django a le droit de lire le manifeste. Je ne peux pas aider beaucoup plus sans plus de détails.

Il s'avère que c'était un truc Django avec 500 pages. Avec la compression hors ligne, Django a essayé de rendre la page 500 sans contexte, ce qui a créé en soi l'erreur 500.

Cela a vraiment aidé:
http://chriskief.com/2013/09/18/django-compressor-offlinegenerationerror-and-500-html-handler500/

Salut tout le monde, le lien vers chriskief.com a été utile. Cependant, cela n'a pas résolu le problème pour moi. Il s'est avéré que j'avais des variables de modèle django comme "{{myvar}}" dans mes javascripts. J'ai oublié de les ajouter à COMPRESS_OFFLINE_CONTEXT et j'ai donc eu l'erreur de clé manquante. Une fois que j'ai sorti tous mes javascripts avec des variables de modèle du compresseur, tout a bien fonctionné à nouveau. Avant j'avais une erreur 500 qui n'affichait pas l'erreur django standard mais la "page de mauvaise configuration" d'Apache. Je ne suis pas encore sûr, si seules les définitions manquantes dans COMPRESS_OFFLINE_CONTEXT sont le problème ou si {% url ... %} provoque également ce problème.

Je le vois dans mon déploiement. J'utilise la compresse comme ça

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

se pourrait-il que compress ne puisse pas traiter la balise sass_src ?

Cette page vous a été utile?
0 / 5 - 0 notes