Notieren Sie sich, was zu tun ist, wenn Sie das Lesen von CSS- und Bilddateien beenden, nachdem Sie eine Django-App gemäß dem Lernprogramm erstellt und in einer Produktionsumgebung bereitgestellt haben.
Diese Folie ist leicht zu verstehen, daher ist es möglicherweise besser, sie zu lesen https://tell-k.github.io/djangocongressjp2019/#43
Django behandelt statische Dateien während der Entwicklung und in der Produktion unterschiedlich. Um dies zu ändern, ist DEBUG = True / False in settings.py.
Da django für die Entwicklung entwickelt wurde, indem es für jede Anwendung in Ordner unterteilt wird, werden CSS- und Bilddateien, bei denen es sich um statische Dateien handelt, ebenfalls im Anwendungsordner abgelegt. Während DEBUG = True ist, was bedeutet, dass sich in der Entwicklung alle Ordner mit dem Namen / static / unter dem in STATIC_URL und STATICFILES_DIRS angegebenen Ordner befinden, die in settings.py geschrieben sind, werden sie von einem Alias namens / static / behandelt.
Zum Beispiel, wenn Sie eine Datei wie project / app1 / static / base.css haben Es behandelt es so, als wäre es http://hoge.com/static/base.css.
Wenn Sie diese Funktion in der Produktionsumgebung verwenden, wird der Hauptprozess unnötig überlastet und kann zu Sicherheitslücken führen. Daher müssen Sie diese Funktion in der Produktionsumgebung deaktivieren. Wenn Sie eine Django-App mit Apache2 usw. bereitstellen, um dies zu erzwingen, wird nur der Beispielbildschirm angezeigt, es sei denn, DEBUG = False.
Wenn DEBUG = True, hat Django eine statische Datei mit Alias / static / bereitgestellt, aber wenn DEBUG = False, wird sie nicht bereitgestellt. Im vorherigen Beispiel also http://hoge.com/static/ Dies bedeutet, dass base.css nicht existiert. Wenn Sie dies mit Apache usw. bereitstellen, können Sie den gleichen Vorgang wie während der Entwicklung ausführen.
Sammeln Sie statische Dateien an einem Ort mit python manage.py collectstatic und schreiben Sie den gesammelten Speicherort in apahce2.conf, damit Apache2 ihn als / static / liefert. Es ist dasselbe wie das Django Girls Tutorial .
Erstellen Sie einen Ordner namens static direkt unter dem Projekt, wie unten gezeigt, und sammeln Sie ihn.
/home/xxxx/django/proj1/
proj1
├── manage.py
├── mysite
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── myvenv
│ └── ...
├── statisch Wo werden statische Dateien gesammelt?
│ ├── hoge.jpg
│ └── base.css
└── requirements.txt
Gibt an, wo statische Dateien erfasst werden sollen (STATIC_ROOT). Im Folgenden lautet / home / xxxx / django / proj1 / static / STATIC_ROOT.
proj1/mysite/setting.py
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
Wenn Sie den Befehl collectstatics ausführen, werden statische Dateien im PATH von STATIC_ROOT erfasst.
terminal
cd /home/xxxx/django/proj1
python manage.py collectstatics
Ich möchte /home/xxxx/django/proj1/static/base.css als http://hoge.com/static/base.css behandeln. Fügen Sie daher dem Ordner einen Alias hinzu und erteilen Sie die Berechtigung (Alle erforderlich).
/etc/apache2/apache2.conf
Alias /static/ /home/xxxx/django/proj1/static/
<Directory /home/xxxx/django/proj1/static>
Require all granted
</Directory>
Ich habe die Einstellungen geändert, also starte Apache2 neu.
terminal
sudo /etc/init.d/apache2 restart
Da collectstatics die Datei einfach kopiert, können Sie den Vorgang überprüfen, indem Sie überprüfen, ob die Datei nach STATIC_ROOT kopiert wurde.
Wenn Sie Apache2 nicht erfolgreich registriert haben, sollte Django wsgi Apache2: 'AH01630: Client von Serverkonfiguration abgelehnt' in Ihrem Apache2-Fehlerprotokoll angezeigt werden. Stellen Sie sicher, dass der Inhalt von apache2.conf mit STATIC_ROOT übereinstimmt.
Wenn Sie die Standardeinstellungen beibehalten, wird das Apache2-Fehlerprotokoll unten angezeigt.
terminal
tail -f /var/log/apache2/error.log
Recommended Posts