Django-compressor: オフライン圧縮が有効になっていますが、オフラインマニフェストにキーがありません

作成日 2011年12月01日  ·  17コメント  ·  ソース: django-compressor/django-compressor

この問題が何であるかはわかりませんが、オフライン生成を使用しています。このエラーは、compressmanagementコマンドを使用してWebサイトにアクセスした後に発生します。 それらのcssファイルのそれぞれに独自のキーが必要ですか?

私の設定:
COMPRESS_URL = STATIC_URL
COMPRESS_ROOT = STATIC_ROOT
COMPRESS_OFFLINE = True
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」がオフラインマニフェストにありません。 「pythonmanage.pycompress」を実行する必要があるかもしれません。

リクエスト方法:GET
リクエストURL:http: //127.0.0.1 :8000 /
Djangoバージョン:1.3.1
例外タイプ:OfflineGenerationError
例外値:
オフライン圧縮を有効にしましたが、キー「b68ba4d2116295c56138e439f1b03a03」がオフラインマニフェストにありません。 「pythonmanage.pycompress」を実行する必要があるかもしれません。
例外の場所:render_offlineの56行目の/srv/www/project/lib/python2.6/site-packages/compressor/templatetags/compress.py

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

最も参考になるコメント

同じことが起こります。 compressにインラインコードがなく、欠落していることを報告するキーが実際にmanifest.jsonに存在します
本当に何が起こっているのかわからない、他の誰かがまだこれを持っていますか? これに関する他のすべてのコメントは1年前のものです

全てのコメント17件

使用しているdjango_compressorのバージョンは何ですか?

PyPIにあるものは何でも。 最新の開発バージョンにアップグレードしてみます。 ありがとう

インラインスクリプトとインクルードファイルを混在させることで同じ問題が発生しました。

これが私のテンプレートコードでした。

{% 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 %}ブロック内のノードのリストの文字列表現のダイジェストです。 ブロックが解析されるたびにそのデータが変化する場合(上記のURLNodeの0x23cf750アドレスを参照)、ページの読み込みにより、マニフェストファイルに保存されているものとは異なるキーが常に生成されます。

私の場合、 {% compress %}ブロックからインラインコードを削除すると問題が解決しました。

データをトレースし、 compressor.cacheget_hexdigest関数でダイジェストできます。 標準の出力/ Webサーバーのエラーログで手がかりを探します。

それが役に立てば幸い、

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

.htmlファイルに存在するインラインjsコードを除いて、すべてが正しく機能します。 .htmlからリンクされたcss / js外部ファイルがいくつかあります。 これらはすべて{%compress css / js%}で十分に圧縮されていますが、.htmlファイルに出力されたすべてのjsコードを圧縮しようとすると(

これにはまだ問題があります。 devブランチでも、{{STATIC_URL}}を使用して、ヘックス生成プロセスが意味をなさない、またはmanifest.jsonに保存されているヘクスに対応する新しいヘクスを生成しているようです。

解決策:compressjsをブロックにまたがらせないでください。 たとえば、マスターテンプレートで1回、それぞれが継承するテンプレートで1回、compressを使用します。 欠点:1つではなく、それぞれcssとjsに対する2つのhttpリクエスト。 マスターjs / cssをすべてのテンプレートに移動することで、1つに減らすことができます。

テンプレートでDRYを選択する必要がなく、httpリクエストを減らす必要がない場合は便利です:)

同じことが起こります。 compressにインラインコードがなく、欠落していることを報告するキーが実際にmanifest.jsonに存在します
本当に何が起こっているのかわからない、他の誰かがまだこれを持っていますか? これに関する他のすべてのコメントは1年前のものです

@altryne :権限の問題である可能性があります。webserver/ djangoプロセスにマニフェストを読み取る権限があることを確認してください。 詳細がなければ、これ以上のことはできません。

500ページのDjangoのものであることがわかりました。 オフラインでの圧縮で、djangoはコンテキストなしで500ページをレンダリングしようとしましたが、それ自体が500エラーを引き起こしました。

これは本当に役に立ちました:
http://chriskief.com/2013/09/18/django-compressor-offlinegenerationerror-and-500-html-handler500/

みなさん、こんにちは。chriskief.comへのリンクは役に立ちました。 しかし、それは私にとって問題を解決しませんでした。 JavaScriptに「{{myvar}}」のようなdjangoテンプレート変数が含まれていることがわかりました。 それらをCOMPRESS_OFFLINE_CONTEXTに追加するのを忘れたため、キーが見つからないというエラーが発生しました。 テンプレート変数を含むすべてのJavaScriptをコンプレッサーから取り出すと、すべてが再び正常に機能しました。 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 %}

compressがsass_srcタグを処理できない可能性がありますか?

このページは役に立ちましたか?
0 / 5 - 0 評価