#問題
Djangoアプリを作成した際、runserver環境では問題ないのに、デプロイ環境ではstaticのcssが読み込まれず、殺風景なHTMLが表示される。原因と対処法は他記事にて詳しく解説してくれているので、ここでは自分用のメモを残すことを目的とする。
#環境
- Windows Server 2016
- Apache 2.4
- Django 3.0
#原因
Djangoではrunserver環境とapacheなどの本番環境で、staticの保管場所が原則異なる。これについては下記が詳しい。
#対処法
設定変更。最終的には下記のようにすることになる。
##STATIC_URL
Djangoからstaticファイルにアクセスするurlを決める。/static/
とすると、Djangoのappnameというアプリのtemplate上でstaticファイル{% static 'css/base.css' %}
は、HTML上ではhttp://localhost/static/appname/css/base.css
とレンダリングされる。
STATIC_URL = '/static/'
##STATIC_ROOT
次のcollectstatic
を実行するにあたって、staticファイルを集める場所を指定する。
STATIC_ROOT = 'D:/static/shib_test/static/'
##collectstatic
runserver環境では、配布性の観点からそれぞれのappがstaticフォルダを持っており、Djangoはそこにアクセスしている。一方、デプロイ環境ではセキュリティの観点から公開用staticファイルは一箇所で提供するのが普通。collectstatic
は、それぞれのappが持っているstaticファイルをSTATIC_ROOTで指定したディレクトリに集めてくる。
> python manage.py collectstatic
##Alias /static/
Alias /static/ D:/static/shib_test/static/ # ←追加
Apacheに対して、例えばhttp://localhost/static/appname/css/base.css
へのGETリクエストがあった場合に、ディスク上のどのリソースを読みに行けばいいか指定する。
以上。