Post Bank

よわいエンジニアのブログ

Whitenoiseの仕様変更

v4.0より前

DjangoプロジェクトををHerokuでデプロイする時に、Django girls tutorialに従ってやると、wsgi.pyファイルに以下のように書くと思う。

wsgi.py

import os

from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')

application = get_wsgi_application()
application = DjangoWhiteNoise(application)

v4.0以降

これで今までは動作してたのだが、ある時急にローカル環境がおかしくなってパッケージを一通り入れ直したら、whitenoiseのバージョンが上がってて、仕様変更が入っていた。

内容はこちらwsgi.pyファイルに上のように書く必要がなくなって、settings.pyのmiddlewareに追記すれば良くなったらしい。まずwsgi.pyファイルはプロジェクト生成した時のままで良くなって、こんな感じ。

wsgi.py

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')

application = get_wsgi_application()

settings.pyはMIDDLEWAREwhitenoise.middleware.WhiteNoiseMiddlewareを加えるのと、STATICFILES_STORAGEwhitenoise.django.GzipManifestStaticFilesStorageからwhitenoise.storage.CompressedManifestStaticFilesStorageに変更する。

settings.py

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ここを見ると、whitenoiseSecurityMiddlewareのすぐ後ろに書いて、他のmiddlewareよりも前に書かなければいけないらしい。