Различия конфигураций для разных окружений

Я заметил, что на моем одном проекте становится слишком много различий в конфигурациях. Например:

  • сессии на деве в файлах, а на проде в базе данных;
  • кеш на деве один, на проде другой, а на локалке третий.

Отсюда и вопрос, вы как прожженый в этом вопросе, подскажите библиотеку или "самурай уэй". Можно конечно все решить через обычный:

if (APP_ENV === 'prod') {
    $config['components']['session'] = ProdSession::class;
}

но оно выглядит как то не очень.

Если конфиг большой, то мы вообще можем и не знать что где-то есть такая "перезапись". Есть какое подобие dotenv или что нибудь вроде того?

Чем больше таких различий, тем больше потенциальных проблем, что локально или на тестовой машине что-то может работать, а на продакшене нет. Или наоборот. Например, при обновлении фреймворка может обнаружиться баг в DbSession и продакшен упадёт. Поэтому я не делаю различий и везде настраиваю всё одинаково.

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

Но при разработке с Vagrant или Docker таких проблем нет. С ними можно доустановить нужные сервисы и во всех окружениях использовать одинаковые сессии, мэйлер и кеш. Как мы в свой проект доустановили эмулятор почтовика и настоящее S3-хранилище для локального и тестового окружений.

Тогда переопределений почти не понадобится. Например, на локалке можно оставить переключение кэша на ArrayCache только при запуске тестов по APP_ENV === 'test'.

А так можно специфику для окружений выносить в отдельные файлы вроде:

$config = Config::merge(
   require 'config/common.php',
   require 'config/' . getenv('APP_ENV') . '.php'
);

чтобы не вписывать кучи if в единый config.php.

Дмитрий Елисеев
elisdn.ru
Комментарии (0)
Зарегистрируйтесь или войдите чтобы оставить комментарий

Или войти через:

Google
GitHub
Yandex
MailRu