Collectstatic ошибка конфигурации при развертывании приложения Django с Dokku

При развертывании приложения Django с использованием dokku я получаю следующую ошибку

Collectstatic configuration error. To debug, run:
$ heroku run python ./manage.py collectstatic --noinput

Я не нашел способа убежать heroku run python ./manage.py collectstatic --noinput для докку контейнера, но когда я пытаюсь dokku run my app python ./manage.py collectstatic --noinputстатические файлы успешно скопированы в STATIC_ROOT папка и сообщение об ошибке не дано.

Я мог бы решить проблему, разместив collectstatic командовать в Procfile:

web: python manage.py collectstatic --noinput ; gunicorn myapp.wsgi

Тем не менее, я хотел бы знать, что является причиной проблемы и как ее можно отладить. Есть идеи?

1 ответ

Решение

В вашем файле settings.py должно быть четыре настройки MEDIA_ROOT, MEDIA_URL, STATIC_ROOT а также STATIC_URL,

Я установил мой так:

MEDIA_ROOT = 'media' STATIC_ROOT = 'static' MEDIA_URL = '/media' STATIC_URL = '/static'

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

Другие вопросы по тегам