Erreur de configuration Collectstatic lors du déploiement de l'application Django avec dokku
-
21-12-2019 - |
Question
Lors du déploiement d'une application Django à l'aide de dokku, j'obtiens une erreur suivante
Collectstatic configuration error. To debug, run:
$ heroku run python ./manage.py collectstatic --noinput
Je n'ai trouvé aucun moyen de courir heroku run python ./manage.py collectstatic --noinput
pour un conteneur Dokku, mais quand j'essaye dokku run my app python ./manage.py collectstatic --noinput
, les fichiers statiques sont copiés avec succès vers le STATIC_ROOT
dossier et aucun message d'erreur donné.
Je pourrais résoudre le problème en plaçant collectstatic
commande dans Procfile
:
web: python manage.py collectstatic --noinput ; gunicorn myapp.wsgi
Néanmoins, j'aimerais savoir quelle était la cause du problème et comment le déboguer.Des idées?
La solution
Vous devriez avoir quatre paramètres dans votre fichier settings.py appelés MEDIA_ROOT
, MEDIA_URL
, STATIC_ROOT
et STATIC_URL
.
J'ai réglé le mien comme ceci :
MEDIA_ROOT = 'media'
STATIC_ROOT = 'static'
MEDIA_URL = '/media'
STATIC_URL = '/static'
Dans le conteneur Docker créé, vous trouverez votre application sous /app qui crée le chemin multimédia /app/media/ et le chemin statique /app/static/.
Malheureusement, si vous n'avez pas de dossier multimédia et statique validé dans git, il ne sera pas créé automatiquement sous /app.
Puisque git ne vous permet pas de valider un dossier vide (il valide uniquement les fichiers), je fais ce qui suit dans mes projets :
mkdir media static
touch media/.dir
touch static/.dir
git add media/.dir static/.dir
git commit -m 'Make media and static directories'
La commande 'touch' crée un fichier vide, puis vous 'git add' les deux fichiers nouvellement créés et les archivez.
Désormais, lorsque vous appuyez, les répertoires seront là pour contenir les fichiers multimédias et statiques.Gardez simplement à l'esprit que chaque fois que vous « git push », un nouveau conteneur est créé et l'ancien est détruit.Bien que cela ne pose pas de problème pour vos fichiers statiques, vos médias seront perdus à moins que vous ne les stockiez ailleurs.