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はMIDDLEWARE
にwhitenoise.middleware.WhiteNoiseMiddleware
を加えるのと、STATICFILES_STORAGE
をwhitenoise.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', ]
ここを見ると、whitenoise
はSecurityMiddleware
のすぐ後ろに書いて、他のmiddlewareよりも前に書かなければいけないらしい。