Django stati c файлы не загружаются при развертывании на Heroku с использованием Docker и Whitenoise - PullRequest
0 голосов
/ 30 мая 2020

Я пытаюсь развернуть приложение django на Heroku (используя Whitenoise ), и все работает нормально, за исключением файлов stati c. Пример проекта просто показывает заголовок «Home» на первой странице. Если файл css загружен правильно, заголовок будет иметь красный цвет, в противном случае он будет черным.

Я получил вышеуказанный проект для работы в контейнере virtualenv, Docker с DEBUG=False, но Я не мог заставить его работать на Heroku по какой-то причине (заголовок был бы красным, если бы CSS загружался правильно).

Я пытался использовать django-heroku как предложено документами Heroku , но он начинает выдавать ошибку сервера 500, а при проверке heroku logs он говорит, что манифест не найден для файла css , который, похоже, потому что он устанавливает STATICFILES_STORAGE на другое значение.

Что-то неправильно настроено в файлах settings или yml ? Или, возможно, из-за того, что я развертываю файл Docker (в отличие от Procfile), мне нужно использовать другие настройки?

Обновление 1:

Как предложено в комментариях. Я попытался следовать тому, что сделано в в этом руководстве , в котором выполнены две дополнительные вещи:

  1. Настройка STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
  2. Запуск heroku plugins:install @heroku-cli/plugin-manifest

При этом теперь я получаю другую ошибку HTTP 500:

/ usr / local / lib / python3 .7 / site-packages / whitenoise / base.py: 115: UserWarning: Нет каталога в: / django -heroku-staticfiles / staticfiles /

Теперь я думаю, что проблема ясна. Итак, я начал запускать несколько команд на экземпляре heroku:

$ heroku run ls -l /django-heroku-staticfiles
Running ls -l /django-heroku-staticfiles on ⬢ evening-lowlands-39080... up, run.5553 (Free)
total 160
-rw------- 1 u35232 dyno    179 May 30 12:21 Dockerfile
-rw------- 1 u35232 dyno 131072 May 30 12:21 db.sqlite3
-rw------- 1 u35232 dyno    235 May 30 12:21 docker-compose.yml
drwx------ 2 u35232 dyno   4096 May 30 12:21 hello_project
-rw------- 1 u35232 dyno    182 May 30 12:21 heroku.yml
-rwx------ 1 u35232 dyno    633 May 30 12:21 manage.py
drwx------ 4 u35232 dyno   4096 May 30 12:21 pages
-rw------- 1 u35232 dyno     93 May 30 12:21 requirements.txt
drwx------ 2 u35232 dyno   4096 May 30 12:21 templates

$ heroku run python manage.py collectstatic --clear --noinput
Running python manage.py collectstatic --clear --noinput on ⬢ evening-lowlands-39080... up, run.9686 (Free)

131 static files copied to '/django-heroku-staticfiles/staticfiles', 413 post-processed.

$ heroku run ls -l /django-heroku-staticfiles
Running ls -l /django-heroku-staticfiles on ⬢ evening-lowlands-39080... up, run.3303 (Free)
total 160
-rw------- 1 u20456 dyno    179 May 30 12:21 Dockerfile
-rw------- 1 u20456 dyno 131072 May 30 12:21 db.sqlite3
-rw------- 1 u20456 dyno    235 May 30 12:21 docker-compose.yml
drwx------ 2 u20456 dyno   4096 May 30 12:21 hello_project
-rw------- 1 u20456 dyno    182 May 30 12:21 heroku.yml
-rwx------ 1 u20456 dyno    633 May 30 12:21 manage.py
drwx------ 4 u20456 dyno   4096 May 30 12:21 pages
-rw------- 1 u20456 dyno     93 May 30 12:21 requirements.txt
drwx------ 2 u20456 dyno   4096 May 30 12:21 templates

Почему staticfiles не создается? Может надо через Docker команду запустить? Извините, я новичок в Docker, Django и Heroku, поэтому я могу упустить что-то очевидное.

1 Ответ

1 голос
/ 30 мая 2020

Благодаря @ Original BBQ Sauce , этот SO вопрос и этот пост Reddit проблема наконец решена. Это связано с тем, где / когда мы запускаем collectstatic. Первоначально я запускал его как release command в файле heroku.yml, который по какой-то причине не создавал каталог staticfiles. Я делал это так, как это сделано в книге Django для профессионалов.

Теперь, если эта команда запускается в Dockerfile вместо этого, создается каталог staticfiles и все должно работать нормально . Репо теперь имеет новые рабочие настройки.

...