Statischer Konfigurationsfehler beim Bereitstellen der Django-App mit Dokku
-
21-12-2019 - |
Frage
Beim Bereitstellen einer Django-App mit dokku wird die folgende Fehlermeldung angezeigt
Collectstatic configuration error. To debug, run:
$ heroku run python ./manage.py collectstatic --noinput
Ich fand keinen Weg zu rennen heroku run python ./manage.py collectstatic --noinput
für einen Dokku-Container, aber wenn ich es versuche dokku run my app python ./manage.py collectstatic --noinput
, werden die statischen Dateien erfolgreich in die STATIC_ROOT
ordner und keine Fehlermeldung angegeben.
Ich könnte das Problem lösen, indem ich platziere collectstatic
befehl in Procfile
:
web: python manage.py collectstatic --noinput ; gunicorn myapp.wsgi
Trotzdem würde ich gerne wissen, was das Problem verursacht hat und wie es behoben werden kann.Irgendwelche Ideen?
Lösung
Sie sollten vier Einstellungen in Ihrem haben settings.py aufgerufene Datei MEDIA_ROOT
, MEDIA_URL
, STATIC_ROOT
und STATIC_URL
.
Ich habe meine so eingestellt:
MEDIA_ROOT = 'media'
STATIC_ROOT = 'static'
MEDIA_URL = '/media'
STATIC_URL = '/static'
Innerhalb des Docker-Containers, der erstellt wird, finden Sie Ihre Anwendung unter / app, die den Medienpfad / app / media / und den statischen Pfad / app / static / erstellt.
Wenn Sie keinen Medien- und statischen Ordner in git festgeschrieben haben, wird dieser leider nicht automatisch unter /app erstellt.
Da git es Ihnen nicht erlaubt, einen leeren Ordner festzuschreiben (es werden nur Dateien festgeschrieben), mache ich in meinen Projekten Folgendes:
mkdir media static
touch media/.dir
touch static/.dir
git add media/.dir static/.dir
git commit -m 'Make media and static directories'
Der Befehl 'touch' erstellt eine leere Datei, dann fügen Sie die beiden neu erstellten Dateien hinzu und checken sie ein.
Wenn Sie jetzt drücken, werden die Verzeichnisse vorhanden sein, um die Medien und statischen Dateien zu enthalten.Denken Sie daran, dass jedes Mal, wenn Sie 'git push' verwenden, ein neuer Container erstellt und der alte zerstört wird.Während dies für Ihre statischen Dateien kein Problem darstellt, gehen Ihre Medien verloren, wenn Sie sie nicht an einem anderen Ort speichern.