Найти в Дзене

Факапы разработчика, день 7


💥 Ошибка, которая научила меня проверять окружение
Программирование — это как сборка мебели: если инструкция или инструменты не те, всё пойдёт наперекосяк. После прошлых факапов я думал, что стал мастером дебаггинга, но окружение решило напомнить мне, что расслабляться рано.

📌 Ситуация
Я работал над проектом на Django — небольшое веб-приложение для управления задачами. Всё шло гладко: настроил модели, настроил роуты, запустил локальный сервер. В базе данных (SQLite для разработки) всё сохранялось, страницы отображались, тесты проходили. Я уже готовился выкладывать проект на тестовый сервер.
Но при переносе на сервер (с PostgreSQL) приложение начало падать. Страницы грузились через раз, а в логах появлялись ошибки вроде DatabaseError: connection timeout. Я был уверен, что проблема в коде или в базе на сервере.

🔎 День паники
Сначала я проверил настройки базы в settings.py:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydb',
'USER': 'myuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '5432',
}
}

Всё выглядело правильно. Я проверил PostgreSQL на сервере — база работает, подключение через psql проходит. Перезапустил сервер, проверил зависимости — всё совпадает с локальной машиной. Даже переписал часть миграций, думая, что они как-то ломаются. Но ошибка не уходила.
Коллега посоветовал проверить сетевые настройки, но я был уверен, что дело в коде. Я потратил часы, сравнивая локальную и серверную версии проекта, и уже начал подозревать баг в самом Django.

🤯 В чём была проблема
К концу дня я решил перепроверить конфигурацию. И тут до меня дошло: в settings.py я указал HOST: 'localhost', но на сервере PostgreSQL был настроен на другой порт и не принимал подключения через localhost. Нужно было использовать IP-адрес сервера или правильный хост. Исправил настройки:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydb',
'USER': 'myuser',
'PASSWORD': 'mypassword',
'HOST': '127.0.0.1',
'PORT': '5433', # другой порт
}
}
И всё заработало! Ошибка была в том, что я не учёл различия между локальным и серверным окружением.

🎯 Вывод
Эта ошибка отняла день и кучу нервов. Что я вынес:

Проверяй окружение. Локальная разработка и сервер — это разные миры, и настройки могут отличаться.
Держи конфигурации под контролем. Теперь я использую .env-файлы и библиотеку python-decouple для разделения настроек.
Слушай коллег. Если бы я сразу проверил сетевые настройки, как мне советовали, сэкономил бы часы.

🚀 Итог
Окружение — это не просто фон, а важная часть проекта. Теперь я всегда проверяю настройки сервера, порты и конфиги перед деплоем. Приложение заработало, а я добавил в свой чек-лист пункт «проверить окружение». И знаете, теперь я даже рад, когда всё запускается с первого раза. 😄
Факапы разработчика, день 7  💥 Ошибка, которая научила меня проверять окружение Программирование — это как сборка мебели: если инструкция или инструменты не те, всё пойдёт наперекосяк.
2 минуты