Приложение Django на Digitalocean доживает до старости - рабочий всегда завершает работу - как определить и исправить?
Недавно я развернул небольшое приложение Django на платформе приложений Digitalocean, но по какой-то причине приложение работает очень медленно.
Это отладка сети при просмотре небольшого статического сайта (на выполнение представления уходит несколько мс в разработке), который даже не обращается к БД.
Вот лог с сервера Digitalocean, который в основном одинаков для всех страниц, которые я пробую - рабочий всегда завершает работу.
[cherry] [2022-08-21 09:53:58] 10.244.17.174 - - [21/Aug/2022:09:53:58 +0000] "GET /search/ HTTP/1.1" 200 5591 "https://cherry.trading/search/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
[cherry] [2022-08-21 09:54:29] [2022-08-21 09:54:29 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:169)
[cherry] [2022-08-21 09:54:29] [2022-08-21 09:54:29 +0000] [169] [INFO] Worker exiting (pid: 169)
[cherry] [2022-08-21 09:54:30] [2022-08-21 09:54:30 +0000] [177] [INFO] Booting worker with pid: 177
У меня базовая подписка с 512 Мб памяти (1 CPU)
Включено ли у вас протоколирование? Если нет, включите бэкенд логирования файлов. После этого вы сможете продолжить исследование.
Вы можете добавить это в settings.py
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': '/path/to/django/debug.log', # Do not forget to change this
},
},
'loggers': {
'django': {
'handlers': ['file'],
'level': 'DEBUG',
'propagate': True,
},
},
}
Таким образом, если представление возвращает какие-либо ошибки, они будут зафиксированы, и вы сможете их устранить.
После некоторого перерыва я наконец нашел проблему. Промежуточное ПО Tailwind испортило все в производстве.
Вот как я теперь добавил его:
# settings.py
DEVELOPMENT_MODE = os.getenv("DEVELOPMENT_MODE", "False") == "True"
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware"
]
if DEVELOPMENT_MODE is True:
# Tailwind hot reloader / browser reload for development environment
MIDDLEWARE.append("django_browser_reload.middleware.BrowserReloadMiddleware")