Django-compressor: Você ativou a compactação offline, mas a chave está faltando no manifesto offline

Criado em 1 dez. 2011  ·  17Comentários  ·  Fonte: django-compressor/django-compressor

Não tenho certeza do que é esse problema, mas estou usando a geração offline e esse erro ocorre após usar o comando de gerenciamento de compactação e acessar o site. Cada um desses arquivos css deve ter sua própria chave?

Minhas configurações:
COMPRESS_URL = STATIC_URL
COMPRESS_ROOT = STATIC_ROOT
COMPRESS_OFFLINE = Verdadeiro
COMPRESS_OFFLINE_MANIFEST = "manifest.json" # É criado no diretório 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' # NÃO FUNCIONA WTF

Você tem a compactação offline habilitada, mas a chave "b68ba4d2116295c56138e439f1b03a03" está faltando no manifesto offline. Você pode precisar executar "python manage.py compress".

Método de solicitação: GET
URL de solicitação: http://127.0.0.1 :8000/
Versão do Django: 1.3.1
Tipo de exceção: OfflineGenerationError
Valor de exceção:
Você tem a compactação offline habilitada, mas a chave "b68ba4d2116295c56138e439f1b03a03" está faltando no manifesto offline. Você pode precisar executar "python manage.py compress".
Localização da exceção: /srv/www/project/lib/python2.6/site-packages/compressor/templatetags/compress.py em render_offline, linha 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>'}

Comentários muito úteis

Faça a mesma coisa acontecer. Não tem nenhum código embutido na compactação, e a chave que relata a falta existe de fato no manifest.json
Realmente não sei o que diabos está acontecendo, alguém ainda tem isso? Todos os outros comentários sobre isso são de um ano atrás

Todos 17 comentários

Qual versão do django_compressor você está usando?

O que estiver no PyPI. Vou tentar atualizar para a versão dev mais recente. Obrigado

Eu tive o mesmo problema misturando scripts embutidos com arquivos incluídos.

Este foi o meu código de modelo.

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

E esses eram os dados que o compressor Django estava usando para gerar uma chave de manifesto.

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

A chave é um resumo da representação em string da lista de nós dentro do bloco {% compress %} . Se esses dados variarem cada vez que o bloco for analisado (veja o endereço 0x23cf750 no URLNode acima), um carregamento de página sempre gerará uma chave distinta daquela que você armazenou em seu arquivo de manifesto.

No meu caso, remover o código embutido do bloco {% compress %} resolveu o problema.

Você pode rastrear os dados e o resumo na função get_hexdigest de compressor.cache . Procure pistas em seu log de erros de saída/servidor web padrão.

Espero que ajude,

Deve ser corrigido na versão de desenvolvimento, graças à correção que foi no #154

Parece que o problema era uma inclusão de script dentro de um bloco embutido. Isso foi na versão dev mais recente. Obrigado @viotti

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

Este problema provavelmente deve ser encerrado, como observado anteriormente aqui, é uma duplicata do nº 154.

Olá, estou sofrendo com esse problema. Meu settings.py está assim:

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

Tudo funciona bem, exceto pelo código js embutido presente no arquivo .html. Eu tenho vários arquivos externos css/js vinculados do meu .html. Tudo isso está bem compactado com {% compact css/js %}, mas quando tento compactar todo o código js impresso no arquivo .html (código entre

Ainda tendo problemas com isso. Parece que mesmo na ramificação dev, usando {{ STATIC_URL }}, o processo de geração hexadecimal está gerando novos hexágonos que não fazem sentido ou correspondem aos hexágonos salvos no manifest.json.

Solução: não faça o compactar js abranger um bloco. Por exemplo, use compress uma vez no modelo mestre e uma vez nos modelos que cada um herda. Desvantagem: duas solicitações http para css e js cada, em vez de uma. Pode ser reduzido a um movendo o master js/css para estar em todos os templates.

Seria bom se não tivéssemos que escolher entre DRY in templates e reduzir solicitações http :)

Faça a mesma coisa acontecer. Não tem nenhum código embutido na compactação, e a chave que relata a falta existe de fato no manifest.json
Realmente não sei o que diabos está acontecendo, alguém ainda tem isso? Todos os outros comentários sobre isso são de um ano atrás

@altryne : pode ser um problema de permissões, verifique se o processo do servidor web / django tem os direitos de ler o manifesto. Não pode ajudar muito mais sem mais detalhes.

Acontece que era uma coisa do Django com uma página de 500. Com a compressão offline, o django tentou renderizar a página 500 sem contexto, o que por si só criou o erro 500.

Isso realmente ajudou:
http://chriskief.com/2013/09/18/django-compressor-offlinegenerationerror-and-500-html-handler500/

Olá a todos, o link para chriskief.com foi útil. No entanto, não resolveu o problema para mim. Acontece que eu tinha vars de template django como "{{myvar}}" em meus javascripts. Esqueci de adicioná-los a COMPRESS_OFFLINE_CONTEXT e, portanto, recebi o erro de chave ausente. Depois que tirei todos os meus javascripts com variáveis ​​de modelo do compressor, tudo funcionou bem novamente. Antes eu recebi um erro 500 que não exibia o erro padrão do django, mas a "página de configuração incorreta" do Apache. Ainda não tenho certeza, se apenas as definições ausentes em COMPRESS_OFFLINE_CONTEXT são o problema ou se também {% url ... %} causa esse problema.

Estou vendo isso na minha implantação. Eu uso compactar assim

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

será que a compressa não pode processar a tag sass_src ?

Esta página foi útil?
0 / 5 - 0 avaliações