Это хороший / плохой способ загрузить специфичные для филиалов конфигурации в Zend Framework? - PullRequest
0 голосов
/ 26 ноября 2011

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

До этого у меня был один файл application.ini с [production], [staging: production] и [development: staging], он находился под контролем исходного кода, и каждый раздел включал мои учетные данные для входа в базу данных. Не идеально.

Итак, теперь я отредактировал файл application.ini, чтобы установить раздел [по умолчанию] и список ветвей, которым разрешено запускать приложение. Вот сокращенная версия:

; application.ini

[default]
; Error handler settings
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0

[production : default]

[staging : default]

[master : default]

[dbupgradeidea : default]

В моем public_html/index.php я теперь создаю Zend_Config_Ini из этого и устанавливаю 'allowModifications' => true.

$defaultConfig = new Zend_Config_Ini( 
    APPLICATION_PATH . '/configs/application.ini', 
    null, 
    array( 
        'allowModifications' => true 
    ));

Затем я пытаюсь загрузить специфичные для ветви параметры в зависимости от среды, в которой работает приложение (устанавливается с помощью .htaccess с помощью SetEnv APPLICATION_ENV <branch-name>

Например, промежуточный сервер устанавливает его в промежуточное состояние.

try {
    $branchConfig = new Zend_Config_Ini(
        APPLICATION_PATH . '/configs/branch-' . APPLICATION_ENV . '.ini'
        );  
} catch (Zend_Config_Exception $e) {
    die('/configs/branch-' . APPLICATION_ENV . '.ini file not found.');
}
В каталоге

My application/configs содержится файл branch.sample.ini с пустым списком параметров, которые должны быть определены каждой ветвью. Также есть запись под .gitignore для branch-*, чтобы специфичные для ветви настройки не включались в репозиторий.

Теперь я объединяю два конфига вместе и преобразую в массив для Zend_Application:

$appConfig = $defaultConfig->merge( $branchConfig );
$appOptions = $appConfig->get( APPLICATION_ENV )->toArray();

// Include the Zend_Application class so we can start the App
require_once 'Zend/Application.php';  

$application = new Zend_Application(
    APPLICATION_ENV, 
    $appOptions
);

Мой рабочий сервер - это просто развертывание производственной ветви под git, то же самое для промежуточного сервера, и любая локальная разработка, которую я делаю, основана на ветви, которую я в данный момент извлек.

Я хотел написать пост в блоге об этом, на всякий случай, если это кому-нибудь помогло, но потом я понял, что это может быть совершенно дурацкий способ сделать что-то, и хотел сначала пропустить его мимо вас, народы.

Пожалуйста, предложите лучшие способы достижения того же результата, или, если вы считаете, что процесс в корне ошибочен, укажите это.

Ура!

1 Ответ

2 голосов
/ 26 ноября 2011

Я решаю эту проблему конкретной конфигурации филиала , используя тайники .

Предлагаемый рабочий процесс

1.Фаза подготовки

Я на ветке (пока без изменений).Я редактирую файлы конфигурации и git stash их.Затем я извлекаю новую ветку и редактирую файлы конфигурации в соответствии со своими потребностями (для этой конкретной ветви).

2.Фактическое использование конфигураций ветвей

Когда я переключаю ветки и хочу, чтобы конфигурация относилась к этой ветке, я делаю

git stash list

, чтобы показать всетайники у меня есть.Чтобы применить один из этих тайников, используйте:

git stash apply stash@{1}

(замените 1 на фактический номер тайника).Чтобы упростить работу со списком тайников, вы должны дать им комментарий, используя команду:

git stash save "my branch <branch name> configurations"

Одно слово: сделайте НЕ используйте git stash pop если вы хотите сохранить изменения в списке тайников.Всегда используйте git stash apply.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...