Короткий ответ
Конфигурацию разделяют по окружениям, чтобы тесты и разработка не затрагивали продовые данные и ресурсы, а изменения можно было безопасно проверить перед продом.
Как это работает подробнее
Приложение читает адреса и учётные данные из переменных окружения/конфигурации, которые отличаются для каждого окружения, при одинаковом коде приложения.
Пример кода
config.yaml
# config/prod.yaml
database_url: "postgresql://prod-host/app"
redis_url: "redis://prod-cache:6379/0"
# config/staging.yaml
database_url: "postgresql://staging-host/app"
redis_url: "redis://staging-cache:6379/0"Что использовать на практике
- Практика. Снижает риск случайного повреждения продовых данных во время разработки/тестирования, позволяет проверять изменения схемы и нагрузочные сценарии изолированно.
Подводные камни
- Риск. Хардкодить продовые адреса/секреты в коде; использовать общую БД для staging и prod «для простоты», что приводит к взаимному влиянию данных.