Ошибка конфигурации Collectstatic при развертывании приложения Django с помощью dokku
-
21-12-2019 - |
Вопрос
При развертывании приложения Django с помощью dokku я получаю следующую ошибку
Collectstatic configuration error. To debug, run:
$ heroku run python ./manage.py collectstatic --noinput
Я не нашел способа убежать heroku run python ./manage.py collectstatic --noinput
для контейнера dokku, но когда я пытаюсь dokku run my app python ./manage.py collectstatic --noinput
, статические файлы успешно копируются в STATIC_ROOT
папка и сообщения об ошибке не выдано.
Я мог бы решить эту проблему, разместив collectstatic
команда в Procfile
:
web: python manage.py collectstatic --noinput ; gunicorn myapp.wsgi
Тем не менее, я хотел бы знать, что стало причиной проблемы и как ее можно отладить.Есть какие-нибудь идеи?
Решение
У вас должно быть четыре параметра в вашем settings.py файле под названием MEDIA_ROOT
, MEDIA_URL
, STATIC_ROOT
и STATIC_URL
.
Я установил свой вот так:
MEDIA_ROOT = 'media'
STATIC_ROOT = 'static'
MEDIA_URL = '/media'
STATIC_URL = '/static'
Внутри созданного контейнера docker вы найдете свое приложение в разделе /app, которое делает путь к носителю /app/media/ и статический путь / app/static/.
К сожалению, если у вас нет медиафайла и статической папки, зафиксированной в git, она не будет создана автоматически в /app.
Поскольку git не позволяет вам фиксировать пустую папку (он фиксирует только файлы), я делаю следующее в своих проектах:
mkdir media static
touch media/.dir
touch static/.dir
git add media/.dir static/.dir
git commit -m 'Make media and static directories'
Команда "touch" создает пустой файл, затем вы "git добавляете" два вновь созданных файла и регистрируете их.
Теперь, когда вы нажимаете, там будут находиться каталоги, содержащие мультимедийные и статические файлы.Просто имейте в виду, что каждый раз, когда вы "git push", создается новый контейнер, а старый уничтожается.Хотя это не проблема для ваших статических файлов, ваш носитель будет потерян, если вы не сохраните его где-нибудь в другом месте.