見出し画像

Heroku でCSSが反映されない。django つまづき集

つまづきをメモ

ローカル/仮想環境だとCSSは問題なく反映されるのに、
Herokuにデプロイするとうまくいかない。

どうやら、whitenoiseなるパッケージがいるらしい。

というわけで、以下リンクにかかれている通り、
settings.pyを書き換え、pip install whitenoise して、
requirements.txtを発行し直す。

それでも、まだうまくいかない。

ModuleNotFoundError: No module named 'whitenoise'

wsgi.py も書き換えるそうだ。

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

application = get_wsgi_application()
application = DjangoWhiteNoise(application)

ググって出てくるのはここまで。でも、これでもまだ動かない。
たぶん、pipfile, pipfile.lockがいけないんじゃないかと思う。

そう思い、pipfile内に、requirements.txtにある、
whitenoiseの行をコピペし、他のやつらと書き方を揃える。

そうして、再デプロイすると、

ImportError:
Your WhiteNoise configuration is incompatible with WhiteNoise v4.0
This can be fixed by following the upgrade instructions at:
http://whitenoise.evans.io/en/stable/changelog.html#v4-0

と返ってくる。時間がないから、今はここまで。

```12/19追記

先週末、理由がわかった。

どうやらwhitenoiseのバージョン4系になったところから、
書き方が変わったらしい。


やるべきことは、先程のwsgi.pyファイル名の修正とsetting.pyの修正。

まず、wsgi.pyの修正

from django.core.wsgi import get_wsgi_application
# この行を削除 from whitenoise.django import DjangoWhiteNoise 

application = get_wsgi_application()
# この行も削除 application = DjangoWhiteNoise(application)

要は、wsgiファイルには、whitenoiseについて書かんでよい。
ということらしい。

そして次に、setting.pyの修正。

MIDDLEWARE = [
  'django.middleware.security.SecurityMiddleware',
  'whitenoise.middleware.WhiteNoiseMiddleware',  #ここに書き足す。
  # ...
]

上記の通り、 'django.middleware.security.SecurityMiddleware',の
次の行に書き足すべきだそうだ。http://whitenoise.evans.io/en/stable/django.html#django-middleware


これで直った。

バージョン確認はちゃんとしなきゃならないということか。

この記事が気に入ったらサポートをしてみませんか?