Ошибка конфигурации Collectstatic при развертывании приложения Django с помощью dokku

StackOverflow https://stackoverflow.com//questions/25039395

Вопрос

При развертывании приложения 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", создается новый контейнер, а старый уничтожается.Хотя это не проблема для ваших статических файлов, ваш носитель будет потерян, если вы не сохраните его где-нибудь в другом месте.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top