μ΄ λ¬Έμ κ° λ¬΄μμΈμ§ νμ€νμ§ μμ§λ§ μ€νλΌμΈ μμ±μ μ¬μ©νκ³ μμΌλ©° μ΄ μ€λ₯λ μμΆ κ΄λ¦¬ λͺ λ Ήμ μ¬μ©νκ³ μΉμ¬μ΄νΈμ μ‘μΈμ€ν νμ λ°μν©λλ€. ν΄λΉ CSS νμΌ κ°κ°μ κ³ μ ν ν€κ° μμ΄μΌ ν©λκΉ?
λ΄ μ€μ :
COMPRESS_URL = STATIC_URL
COMPRESS_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"
μ€νλΌμΈ μμΆμ μ¬μ©νλλ‘ μ€μ νμ§λ§ μ€νλΌμΈ 맀λνμ€νΈμμ "b68ba4d2116295c56138e439f1b03a03" ν€κ° λλ½λμμ΅λλ€. "python manage.py compress"λ₯Ό μ€νν΄μΌ ν μλ μμ΅λλ€.
μμ² λ°©λ²: GET
μμ² 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>'}
μ΄λ€ λ²μ μ 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.cache μ get_hexdigest ν¨μμμ λ°μ΄ν°μ λ€μ΄μ μ€νΈλ₯Ό μΆμ ν μ μμ΅λλ€. νμ€ μΆλ ₯/μΉ μλ² μ€λ₯ λ‘κ·Έμμ λ¨μλ₯Ό μ°ΎμΌμμμ€.
λμμ΄ λκΈ°λ₯Ό λ°λλλ€.
#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 μ½λλ₯Ό μμΆνλ €κ³ ν λ(μ½λ μ¬μ΄ labels) i get this error.
"OfflineGenerationError at /
You have offline compression enabled but key "b7126bf66f8e06bde131d96c54be3a47" is missing from offline manifest. You may need to run "python manage.py compress"."
Any tip to solve this?
rubenjimenez: κ°λ° λ²μ μ μ¬μ©ν΄ 보μμμ€. κ·Έλλ λ¬Έμ κ° ν΄κ²°λμ§ μμΌλ©΄ λ€μ μ 보λ₯Ό μ¬μ©νμ¬ μ λ²κ·Έλ₯Ό μ½λλ€.
κ°λ° λ²μ μ μ¦λͺ νλλ° μ¬μ ν κ°μ μ€λ₯κ° λ°μν©λλ€. μ€νλΌμΈ μμΆμμλ§ λ°μνλ©° νμ λͺ¨λ js μΈλΌμΈ μ½λμ ν¨κ» λνλ©λλ€.
μ λ {% compress js %}κ° μλλΌ {% compress js inline %}λ‘ μλνκ³ μμ΅λλ€(μ΄κ²λ μ€ν¨ν¨).
λ λ§μ μ λ³΄κ° νμνλ©΄ μ£Όμ νμ§ λ§κ³ μμ²νμμμ€.
κ°λ° λΆκΈ°μ λμΌν λ¬Έμ
μ¬μ ν λ¬Έμ κ° μμ΅λλ€. dev λΆκΈ°μμλ {{ STATIC_URL }}μ μ¬μ©νμ¬ 16μ§μ μμ± νλ‘μΈμ€κ° μλ―Έκ° μκ±°λ manifest.jsonμ μ μ₯λ 16μ§μμ ν΄λΉνμ§ μλ μλ‘μ΄ 16μ§μλ₯Ό μμ±νλ κ²μΌλ‘ 보μ λλ€.
μ루μ : μμΆ jsκ° λΈλ‘μ κ±Έμ³ μμ§ μλλ‘ ν©λλ€. μλ₯Ό λ€μ΄, λ§μ€ν° ν νλ¦Ώμμ ν λ² μμΆμ μ¬μ©νκ³ κ°κ°μ΄ μμνλ ν νλ¦Ώμμ ν λ² μ¬μ©ν©λλ€. λ¨μ : css λ° jsμ λν΄ κ°κ° νλκ° μλ λ κ°μ http μμ². λ§μ€ν° js/cssλ₯Ό λͺ¨λ ν νλ¦Ώμ ν¬ν¨νλλ‘ μ΄λνμ¬ νλλ‘ μ€μΌ μ μμ΅λλ€.
ν νλ¦Ώμμ DRYλ₯Ό μ ννκ³ http μμ²μ μ€μ΄λ κ² μ€ νλλ₯Ό μ ννμ§ μμλ λλ€λ©΄ μ’μ κ²μ λλ€. :)
κ°μ μΌμ΄ μΌμ΄λμμμ€. μμΆμ μΈλΌμΈ μ½λκ° μμΌλ©° λλ½λ κ²μΌλ‘ λ³΄κ³ νλ ν€λ μ€μ λ‘ manifest.jsonμ μμ΅λλ€.
λλ체 λ¬΄μ¨ μΌμ΄ μΌμ΄λκ³ μλμ§ μ λ§ λͺ¨λ₯΄κ² μ΄, λ€λ₯Έ μ¬λμ΄ μμ§λ μ΄κ²μ κ°μ§κ³ μλ? μ΄κ²μ λν λ€λ₯Έ λͺ¨λ λκΈμ 1λ
μ μ κ²μ
λλ€.
@altryne : κΆν λ¬Έμ μΌ μ μμ΅λλ€. μΉ μλ²/django νλ‘μΈμ€μ 맀λνμ€νΈλ₯Ό μ½μ μ μλ κΆνμ΄ μλμ§ νμΈνμΈμ. λ μμΈν μ 보 μμ΄λ λ μ΄μ λμμ΄ λ μ μμ΅λλ€.
500νμ΄μ§ λΆλμ Djangoμμ΅λλ€. μ€νλΌμΈ μμΆμ μ¬μ©νμ¬ djangoλ 컨ν μ€νΈ μμ΄ 500νμ΄μ§λ₯Ό λ λλ§νλ €κ³ νμΌλ©°, μ΄λ‘ μΈν΄ μ체μ μΌλ‘ 500 μ€λ₯κ° λ°μνμ΅λλ€.
μ΄κ²μ μ λ§ λμμ΄ λμμ΅λλ€:
http://chriskief.com/2013/09/18/django-compressor-offlinegenerationerror-and-500-html-handler500/
μλ νμΈμ μ¬λ¬λΆ, chriskief.comμ λν λ§ν¬κ° λμμ΄ λμμ΅λλ€. κ·Έλ¬λ κ·Έκ²μ λλ₯Ό μν΄ λ¬Έμ λ₯Ό ν΄κ²°νμ§ λͺ»νμ΅λλ€. λ΄ μλ° μ€ν¬λ¦½νΈμ "{{myvar}}"μ κ°μ django ν νλ¦Ώ λ³μκ° μλ κ²μΌλ‘ λνλ¬μ΅λλ€. COMPRESS_OFFLINE_CONTEXTμ μΆκ°νλ κ²μ μμμΌλ―λ‘ ν€ λλ½ μ€λ₯κ° λ°μνμ΅λλ€. ν νλ¦Ώ λ³μκ° μλ λͺ¨λ μλ°μ€ν¬λ¦½νΈλ₯Ό μμΆκΈ°μμ κΊΌλ΄λ©΄ λͺ¨λ κ²μ΄ λ€μ μ μλνμ΅λλ€. νμ€ django μ€λ₯κ° μλλΌ Apache "μλͺ»λ κ΅¬μ± νμ΄μ§"λ₯Ό νμνλ 500 μ€λ₯κ° λ°μνκΈ° μ μ. 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
νκ·Έλ₯Ό μ²λ¦¬ν μ μκΈ° λλ¬ΈμΌ μ μμ΅λκΉ?
κ°μ₯ μ μ©ν λκΈ
κ°μ μΌμ΄ μΌμ΄λμμμ€. μμΆμ μΈλΌμΈ μ½λκ° μμΌλ©° λλ½λ κ²μΌλ‘ λ³΄κ³ νλ ν€λ μ€μ λ‘ manifest.jsonμ μμ΅λλ€.
λλ체 λ¬΄μ¨ μΌμ΄ μΌμ΄λκ³ μλμ§ μ λ§ λͺ¨λ₯΄κ² μ΄, λ€λ₯Έ μ¬λμ΄ μμ§λ μ΄κ²μ κ°μ§κ³ μλ? μ΄κ²μ λν λ€λ₯Έ λͺ¨λ λκΈμ 1λ μ μ κ²μ λλ€.