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