Heroku - Ошибка приложения - Heroku терпит крах при DEBUG = False

Я только что выяснил, как разместить мои статические файлы на Whitenoise, и они прекрасно размещаются, когда DEBUG = False. Мне пришлось разместить их таким образом, потому что в продакшене я постоянно получал 500 ошибок, потому что Heroku не мог разместить мои статические файлы. Теперь все работает нормально. Однако теперь я столкнулся с другой проблемой. При DEBUG = False в settings.py теперь все мое приложение Heroku падает и показывает страницу ниже. Это происходит только тогда, когда DEBUG = False. Изначально я думал, что это разрешенный хост, но я установил значение '*', которое должно разрешить все, просто для тестирования, и все равно получил ту же проблему. Как мне остановить Heroku от сбоя при DEBUG = False?

enter image description here

settings.py

журналы хероку

Хотя могут быть и другие причины, обычно это связано со статическими файлами.

Согласно документации по Heroku, которую можно найти здесь:

Django не будет автоматически создавать целевой каталог (STATIC_ROOT), который использует collectstatic, если он недоступен. Вам может понадобиться создать этот каталог в вашей кодовой базе, чтобы он был доступен при запуске collectstatic. Git не поддерживает пустые каталоги файлов, поэтому вам придется создать файл и внутри этого каталога.

.

Во время развертывания Heroku будет искать папку static в корне вашего проекта (в том же каталоге, где находится ваш файл manage.py) и/или в том каталоге, который вы указали в settings.py через переменную STATICFILES_DIRS, которая может выглядеть следующим образом:

STATICFILES_DIRS = ['BASE_DIR / 'static']

Если Django не может найти эти папки или если папки static пустые, у вас могут возникнуть трудности во время развертывания. Хотя процесс сборки может завершиться успешно, вы получите эти 500 ошибок, когда DEBUG установлен в False и останетесь в недоумении, что пошло не так.

Один из способов проверить, существуют ли папки static - это зайти на ваш сервер Heroku, выполнив следующую команду из терминала:

heroku run bash

После подключения к серверу вы можете перечислить каталоги в корне вашего приложения.

ls

heroku run bash

Теперь, в зависимости от того, где и как вы определили настройки каталогов static и staticfiles, вам нужно проверить, что эти две папки доступны в вашем приложении. Пример, показанный здесь, основан на этих двух настройках:

// specifies the root directory of your static files when app is deployed.
// the output will be stored in this directory after running 
// `python manage.py collectstatic`
STATIC_ROOT = BASE_DIR / 'staticfiles'

// specifies which directories to use for static files during development 
// and which directories to look in when 
// `python manage.py collectstatic` is run
STATICFILES_DIR = [BASE_DIR / 'static']

Вам также нужно убедиться, что ваш каталог static не пуст; в нем должен быть файл, чтобы Git его принял и чтобы python manage.py collecstatic прошел успешно.

Согласно документам Heroku:

Когда приложение Django развертывается на Heroku, $ python manage.py collectstatic --noinput выполняется автоматически во время сборки. Сборка завершится неудачей, если шаг collectstatic не будет успешным.

Хотя вы можете явно указать Heroku не запускать collectstatic во время процесса сборки, выполнив heroku config:set DISABLE_COLLECTSTATIC=1, и ваша сборка может завершиться успешно, это скорее всего и в конечном итоге приведет к ошибкам в дальнейшем (как, например, ошибка 500 при установке DEBUG=False).

Поэтому даже если вы не используете или не имеете статических файлов, безопаснее создать папку static в корне вашего приложения и поместить в нее фиктивный файл (любое изображение, js или css файл), чтобы он был подхвачен Heroku во время развертывания.

После этого, надеюсь, будут устранены все 500 ошибки, и ваше приложение сможет работать, когда вы установите DEBUG=False.

Напоследок, если у вас все еще возникают проблемы, вы также можете включить отладку collectstatic в Heroku. Согласно документации Heroku:

Если во время сборки collectstatic потерпел неудачу, предоставляется обратная трассировка, которая будет полезна для диагностики проблемы. Если вам нужна дополнительная информация о среде, в которой выполнялся collectstatic, используйте конфигурацию DEBUG_COLLECTSTATIC.

.

Это можно сделать, набрав в терминале следующее:

heroku config:set DEBUG_COLLECTSTATIC=1
Вернуться на верх