django-compressorλ‘ μμ±λ νμΌμ μ κ·Όν μ μμ΅λλ€. staticfiles/CACHE/
μμ μμ±λμ§λ§ νμ΄μ§λ₯Ό λ‘λνλ©΄ λ€μκ³Ό κ°μ΄ νμλ©λλ€.
GET https://site.com/de/static/CACHE/css/5e257aa688ab.css/ 404 (Not Found)
GET https://site.com/de/static/CACHE/js/3f1c59956fa3.js/ 404 (Not Found)
μ°Έκ³ : μλ³Έ λ§ν¬λ 404 νμ΄μ§λ‘ 리λλ μ
λλ―λ‘ URLμ /de/
κ° μμ΅λλ€. μμ€ μ½λμμ λ€μ λΈλ‘μ μ νν©λλ€.
<link rel="stylesheet" href="/static/CACHE/css/5e257aa688ab.css" type="text/css" />
<script type="text/javascript" src="/static/CACHE/js/3f1c59956fa3.js"></script>
django-sekizai
μ κ·Έμ λ°λ₯Έ νμ²λ¦¬κΈ° compressor.contrib.sekizai.compress
λ₯Ό μ¬μ©νλ€λ μ μ μ£Όλͺ©ν κ°μΉκ° μμ΅λλ€.
λ΄ μ€μ :
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
COMPRESS_STORAGE = 'compressor.storage.GzipCompressorFileStorage'
COMPRESS_URL = STATIC_URL
COMPRESS_ENABLED = True
STATIC_ROOT = '/app/staticfiles/' # usually computed, ends up here
STATIC_URL = '/static/'
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
# Django-Bower
'compressor.finders.CompressorFinder',
)
ν νλ¦Ώ νκ·Έ:
{% render_block "css" postprocessor "compressor.contrib.sekizai.compress" %}
{% render_block "js" postprocessor "compressor.contrib.sekizai.compress" %}
λκ΅°κ° λλ₯Ό λμΈ μ μμ΅λκΉ? λλ μ§κΈ 3 μΌ λμ μ΄κ²κ³Ό μλ§μ μκ° λμ λΆμ΄ μμ΅λλ€ ...
μμΆκΈ°λ₯Ό λ‘컬μμ νμ±ννλ©΄ μλ²½νκ² μλν©λλ€! CACHE ν΄λμμ νμΌμ μ°Ύμ μ μλ κ²μ μλ²μ μμ λΏμ΄λ©° λ€λ₯Έ λͺ¨λ κ²μ μ°Ύμ μ μμ΅λλ€.
Ok λ λ€λ₯Έ λ°κ²¬: μΈν€μμ΄ + νμ΄νΈλ Έμ΄μ¦ + μ»΄νλ μμ μ‘°ν©μΌλ‘ μΈν΄ λ¬Έμ κ° λ°μνλ κ² κ°μ΅λλ€. Whitenoise Docsλ "_μ±λ₯ λ° λ³΄μμμ μ΄μ λ‘ WhiteNoiseλ μμ ν μ νμΌμ νμΈνμ§ μμ΅λλ€(Django DEBUG λͺ¨λλ₯Ό μ¬μ©νμ§ μλ ν). λ°λΌμ λͺ¨λ μ μ νμΌμ 미리 μμ±ν΄μΌ ν©λλ€. Django Compressorλ₯Ό μ¬μ©νλ κ²½μ° μ΄κ²μ΄ κ°λ₯ν©λλ€. μ€νλΌμΈ μμΆ κΈ°λ₯μ μ¬μ©νμ¬ μνλ©λλ€._" κ·Έλμ Sekizaiλ μ¬μ©μκ° νμ΄μ§λ₯Ό μ΄ λλ§λ€ μ€μκ°μΌλ‘ μμΆν©λλ€(μΈν€μμ΄μ νΉμ±μΌλ‘ μΈν΄ μ€νλΌμΈ μμΆμ μ¬μ©ν μ μμ). Whitenoiseλ λ€μ κ²μνμ§ μμΌλ―λ‘ νμΌμ΄ μ‘΄μ¬νμ§ μλλ€κ³ κ°μ ν©λλ€. νμ΄μ§λ₯Ό μ΄κ³ νμΌμ΄ μμ±λ ν Djangoλ₯Ό λ€μ μμνλ©΄ μλν©λλ€. κ·Έλ¬λ λ€λ₯Έ νμ΄μ§λ‘ μ΄λνλ©΄ λμΌν νλ‘μΈμ€λ₯Ό λ€μ μνν΄μΌ ν©λλ€(νμ΄μ§λ₯Ό μ΄κ³ λ€μ μμ). κ·Έλ° λ€μ μ λλ‘ μ°Ύμ΅λλ€ ...
λ¬Έμ λ₯Ό ν΄κ²°νλ λ°©λ²μ λν μμ΄λμ΄κ° μμ΅λκΉ? λ€μ ν μ€νΈλ μμΆ νμ²λ¦¬κΈ°μ ν¨κ» μΈν€μμ΄λ₯Ό μ¬μ©νμ§ μλ κ²μ΄μ§λ§ μΈν€μμ΄ λ° μ€μκ° μ μ μμ²κ³Ό ν¨κ» μλνλ μ루μ μ μν©λλ€.
κ·Έλμ whitenoise.django.DjangoWhiteNoise
μ μμ νκ³ λ³κ²½νμ΅λλ€.
self.autorefresh = settings.DEBUG
self.use_finders = settings.DEBUG
μκ²
self.autorefresh = True
self.use_finders = True
μ΄μ μλν©λλ€. μ±λ₯ λ¬Έμ λ₯Ό 무μνκ³ (μμ§ λμΉμ±μ§ λͺ»ν λ°λ©΄μ Google Page Speed ββInsightλ μλ μλ‘ κ³ μΉ¨μ΄ νμ±νλ μνμμ ν κ°μ§ λ ν¬μΈνΈλ₯Ό μ€λλ€..) 보μ λ¬Έμ λ 무μμ λκΉ? λλ κ·Έκ²μ νΌν μ μμ΅λκΉ? Whitenoiseκ° μ€μκ°μΌλ‘ μμ±λ μ μ (μ: django-compressor CACHE)λ μ²λ¦¬ν μ μλ€λ©΄ λλμ΅λλ€.
λ΄ μ λ ₯μ΄ λ€λ₯Έ μ¬λμ΄ μ΄κ²μ λ°κ²¬νλ λ° λμμ΄ λκΈΈ λ°λλλ€.
μλ ,
μ΄κ²μ μμΆκΈ° λ¬Έμ κ° μλλλ€. μ΄κ²μ stackoverflow λλ μ΄μ μ μ¬ν κ²(λλ μλ§λ whitenoise μ§μ ν¬λΌ)μ μν©λλ€.
κ·Έλ, λλ κ·Έ κ²°λ‘ μ λλ¬νλ€ :) νμ΄νΈλ Έμ΄μ¦μμ μ¬λλ€μκ² λ¬Όμ΄λ³Ό κ²μ΄λ€. κ°μ¬ ν΄μ
@oesah , κ°μ¬ν©λλ€. λλ λκ°μ λ¬Έμ κ° μμ΅λλ€. λλ μ΄κ²μ΄ μμΆκΈ° λ¬Έμ κ° μλλ©° μ΄ μ€λ λκ° μ΄μ λ«νλ€λ κ²μ μκ³ μμ΅λλ€. κ·Έλ¬λ νμ΄νΈλ Έμ΄μ¦μ λν μ΄ ν λ‘ μ μμνλ€λ©΄ λ§ν¬λ₯Ό κ²μν μ μμ΅λλ€. λλ μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ λͺ μκ°μ 보λκ³ μ΄ μ€λ λλ μλͺ μ μμΈμ΄μμ΅λλ€!
κ°μ₯ μ μ©ν λκΈ
@oesah , κ°μ¬ν©λλ€. λλ λκ°μ λ¬Έμ κ° μμ΅λλ€. λλ μ΄κ²μ΄ μμΆκΈ° λ¬Έμ κ° μλλ©° μ΄ μ€λ λκ° μ΄μ λ«νλ€λ κ²μ μκ³ μμ΅λλ€. κ·Έλ¬λ νμ΄νΈλ Έμ΄μ¦μ λν μ΄ ν λ‘ μ μμνλ€λ©΄ λ§ν¬λ₯Ό κ²μν μ μμ΅λλ€. λλ μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ λͺ μκ°μ 보λκ³ μ΄ μ€λ λλ μλͺ μ μμΈμ΄μμ΅λλ€!