Мерзавец: конфигурация приложения и различные среды

Мы используем мерзавца для большинства веб-приложений, которые мы создаем в нашем магазине, и хотя сами приложения используют множество технологий (PHP, направляющие, и т.д.), у нас обычно есть подготовка и рабочий сервер для каждого сайта. Как правило, эти серверы имеют различные наборы учетных данных базы данных, а также различные основанные на среде параметры конфигурации (например, кэширующийся). Наш рабочий процесс обычно включает поддержание двух ответвлений мерзавца на проект: ведущее устройство, которое отражает рабочий сервер и подготовку, которая отражает подготовку. Новые возможности разрабатываются при подготовке (или небольшой филиал) и объединяются назад с ведущим устройством после завершения и развертывания.

Мой вопрос относительно лучшего способа поддержать конфигурационные файлы, которые являются ответвлением - и определенный для среды. Я видел ответы от подобных вопросов здесь и здесь, и ни один действительно не удовлетворяет. Основные два подхода, кажется, a) использование .gitignore исключение для отъезда файлов конфигурации за пределами области мерзавца, или b) написание отражающего, осведомленного о среде кода, который определяет, например, что учетные данные базы данных использовать на основе имени хоста. Моя проблема с a) то, что это только позволяет одному набору файлов конфигурации существовать в кодовой базе (независимо от текущего ответвления), таким образом, файлы конфигурации другой среды теряются. b), с другой стороны, просто, кажется, требует ненужной модификации кодовой базы способом, которая не чувствует себя связанной с функциональностью приложения.

Идеально, я хотел бы способ "заблокировать" конфигурационные файлы в рамках определенного ответвления, так, чтобы каждый раз, когда я ведущее устройство контроля, я получаю основные файлы конфигурации, и каждый раз, когда я подготовка контроля, я получаю файлы конфигурации подготовки. Кроме того, слияние подготавливающий в ведущее устройство не должно влиять на основные файлы конфигурации всегда. До настоящего времени мы имели дело с этим при наличии папок, содержащих определенные для среды конфигурационные файлы за пределами корня мерзавца и вручную перемещающих соответствующие файлы в кодовую базу при развертывании, но это, конечно, напрасно hackish (и потенциально опасно).

Там какой-либо путь состоит в том, чтобы выполнить этого мерзавца использования?

Спасибо за Ваше внимание!

10
задан Community 23 May 2017 в 11:54
поделиться

2 ответа

Не понимаю, почему люди думают, что могут обойтись без какого-то инструмента установки. Git предназначен для отслеживания исходников, а не для развертывания. У вас все равно должен быть инструмент типа "make install" для перехода от git-репозитория к фактическому развертыванию, и этот инструмент может делать различные вещи, такие как расширение шаблона или выбор альтернативных файлов.

Например, у вас могут быть "config.staging" и "config.production", зарегистрированные в git, и при развертывании на staging инструмент установки выбирает "config.staging" для копирования в "config". Или у вас может быть один файл "config.template", который будет шаблонизирован для создания "config" при развертывании.

12
ответ дан 3 December 2019 в 22:34
поделиться

Я предполагаю, что обычно master хранит только коммиты, которые уже находятся в staging. Если вы добавите дополнительный коммит в master, который содержит различия в конфигурации между двумя ветками, то ребазинг этого коммита поверх всего, что было извлечено из staging, должен сохранить конфигурацию. Это не так просто, как "слияние staging в master никак не должно влиять на конфигурационные файлы master", но поскольку в таких случаях вы получите конфликт слияния, это может быть достаточно близко.

0
ответ дан 3 December 2019 в 22:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: