Авторская конфигурация

Выкладываем свои наработки
Ответить
Аватара пользователя
long
Сообщения: 8
Зарегистрирован: 2011.03.05, 12:11

Авторская конфигурация

Сообщение long » 2011.03.05, 16:59

В процессе работы над проектами накопилось некоторое количество решений, которые можно было бы оформить в виде расширений и открыть сообществу. Понятное дело, что выложить все и сразу не реально, но надо с чего-то начинать. Начинаю с малого, но (на мой взгляд) полезного - авторские конфигурации.

Собственно проблема
При работе в команде первое, с чем сталкиваешься - разное окружение у членов команды. Например, параметры подключения к базам у всех разные. Кто-то использует логирование через firePHP, кому-то достаточно штатного лога. В свое время, на других проектах, мы уже решили эту проблему следующим образом - ввели понятие авторской конфигурации. Т.е существует основной конфигурационный файл (обычно его называем main.php), в который сведены все общие для всех настройки (либо, это может быть конфигурация для продакшена, но лучше все же для production завести свой авторский конфиг), а любой разработчик может создать свой авторский файл, в котором переопределить и/или расширить (это удобно для разработки фич, которых еще нет в trunk) основную конфигурацию. Так же такая фича полезна когда у одного из разработчиков возникает необходимость подключится к работе с товарищем. Конфигурации должны легко переключаться, без внесений изменений в код.

Решение
Решение оформлено в виде расширения (хотя по сути оно не является расширением, ибо включается в работу раньше самого фреймворка) - pha-yii-author.

Установка и настройка
  1. Скачать код и развернуть в папку protected.
  2. Создать основной конфигурационный файл main.php.
  3. Создать авторский конфигурационный файл, например, developer_one.php (совет - называйте авторские файлы по именам членов команды, так будет понятнее кому он принадлежит).
  4. В папке author, которая должна была появится после п.1, создать файл .developer_one (точка является обязательной). Файл может быть пустым, его содержимое не используется. Файл лучше сразу добавить в список игнорируемых в используемой системе контроля версий.
  5. Изменить index.php. Пример изменения находится в extensions/phaAuthor/examples/index-with-author.php.
Настройка сводится к изменению вашего index.php.

Код: Выделить всё

<?php
$webRoot=dirname(__FILE__);
// change the following paths if necessary
$yii=$webRoot.'/../framework/yii.php';

require_once( $webRoot . '/protected/extensions/phaAuthor/CPhaAuthor.php');

$sAuthor = CPhaAuthor::get();

if ( $sAuthor !== false ) {
    // turn on debug mode + author config
    $config = $webRoot.'/protected/config/' . $sAuthor . '.php';
    if (!file_exists($config)) {
        $config = $webRoot . '/protected/config/main.php';
    }
    defined('YII_DEBUG') or define('YII_DEBUG',true);

    // specify how many levels of call stack should be shown in each log message
    defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);
}
else {
    // production mode
    $config=$webRoot . '/protected/config/production.php';
}

require_once($yii);
Yii::createWebApplication($config)->run();
 
Как видно из примера, существует два режима работы приложения - девелоперский, в котором включена отладка, и продакшен.
p.s. Возможно, уже существует решение этой проблемы, но мне оно не встретилось.


Аватара пользователя
samdark
Администратор
Сообщения: 9134
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Авторская конфигурация

Сообщение samdark » 2011.03.05, 17:07

По ссылкам решения похожи, но не точно такие же.

Классы расширений лучше именовать EPhaAuthor, а не CPhaAuthor.

Аватара пользователя
long
Сообщения: 8
Зарегистрирован: 2011.03.05, 12:11

Re: Авторская конфигурация

Сообщение long » 2011.03.05, 17:25

первое совсем не то - если 10 разработчиков, то будет куча лишнего кода. второе - требует изменения кода для переключения и при командной работе изменения 'currentConfig' практически на 100% будут попадать в рабочий репозиторий, приводя остальных членов команды сначала в легкое замешательство, а потом в ярость :) да и поддерживать массив 'configs' в большой команде не удобно.
в моем случае конфиги разработчиков не влияют друг на друга, переключение происходит прозрачно, а настройка игнорирования всех файлов, начинающихся с точки для папки author гарантирует отсутсвие разборок внутри команды на тему "какое чудо опять коммитнуло свой конфиг" :)

Аватара пользователя
long
Сообщения: 8
Зарегистрирован: 2011.03.05, 12:11

Re: Авторская конфигурация

Сообщение long » 2011.03.05, 17:27

Sam Dark писал(а):Классы расширений лучше именовать EPhaAuthor, а не CPhaAuthor.
Ок, я брал пример с другого расширения, видимо оно не самое лучшее было :) Сейчас поменяю, пока не пошло в массы

Аватара пользователя
pr_o
Сообщения: 65
Зарегистрирован: 2010.01.19, 02:20

Re: Авторская конфигурация

Сообщение pr_o » 2011.03.05, 23:15

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

Аватара пользователя
BuCeFaL
Сообщения: 447
Зарегистрирован: 2010.03.17, 21:22
Откуда: Kiev
Контактная информация:

Re: Авторская конфигурация

Сообщение BuCeFaL » 2011.03.06, 00:51

pr_o писал(а):А зачем разные конфиги? Приведите пример?
Если я не ошибаюсь, то можно согласовать конфиг-файл со всеми разработчиками и пользоваться им. Неудобно спать на потолке... пусть привыкают те, кому не нравится конфиг.
есть разные сервера, от девелоперских машин и тестовых до продакшен, если менять конфиг при каждом затягивании епануться можно, а если проталкивать свой конфиг то значит ломать работу всем серверам.
Куда проще если будет 1 основной конфиг, а другие через CMap::mergeArray будут менять только то что им необходимо, а локальные настройки можно (и нужно) добавить в исключение. (.hgignore к примеру)

karagodin
Сообщения: 26
Зарегистрирован: 2010.07.03, 06:26
Контактная информация:

Re: Авторская конфигурация

Сообщение karagodin » 2011.03.06, 21:37

long писал(а):второе - требует изменения кода для переключения и при командной работе изменения 'currentConfig' практически на 100% будут попадать в рабочий репозиторий, приводя остальных членов команды сначала в легкое замешательство, а потом в ярость :) да и поддерживать массив 'configs' в большой команде не удобно.
в моем случае конфиги разработчиков не влияют друг на друга, переключение происходит прозрачно, а настройка игнорирования всех файлов, начинающихся с точки для папки author гарантирует отсутсвие разборок внутри команды на тему "какое чудо опять коммитнуло свой конфиг" :)
если например currentConfig='main', то автоматически будет подхватываться файл main_local.php который будет перекрывать необходимые настройки из main.php. Заигнориваем все файлы по шаблону *_local.php в папке Config и у каждого разработчика будет своя локальная конфигурация которая гарантированно не попадет в репозиторий.

Аватара пользователя
long
Сообщения: 8
Зарегистрирован: 2011.03.05, 12:11

Re: Авторская конфигурация

Сообщение long » 2011.03.07, 03:43

karagodin писал(а):если например currentConfig='main', то автоматически будет подхватываться файл main_local.php который будет перекрывать необходимые настройки из main.php. Заигнориваем все файлы по шаблону *_local.php в папке Config и у каждого разработчика будет своя локальная конфигурация которая гарантированно не попадет в репозиторий.
это конечно хук, который решает проблему конфликта конфигураций разработчиков. но и автоматически означает отказ от хранения конфигов разработчиков в репозитории проекта, что черевато потерей этого конфига.
плюс нет возможности переключится на конфиг конкретного разработчика. да даже посмотреть его нет возможности - не раз сталкивался с тем, что в локальном конфиге что-то добавлялось или менялось, и эти изменения забывали пронести в общий конфиг. ошибку потом можно долго искать.

Аватара пользователя
Stamm
Сообщения: 407
Зарегистрирован: 2010.03.14, 18:59
Откуда: Россия, Москва
Контактная информация:

Re: Авторская конфигурация

Сообщение Stamm » 2011.03.07, 06:03

Использую данных подход. В папке ещё лежит примеры девелоперского конфига, который при надобности обновляется.
В файлах test и console мёржатся сначала main и массив в файле, а потом уже получившийся массив с кастомным конфигом.

3ton
Сообщения: 61
Зарегистрирован: 2009.06.30, 16:35

Re: Авторская конфигурация

Сообщение 3ton » 2011.04.18, 15:08

мы пошли несколько иным путем

создали в SVN 2 репозитория
первый - наше приложение
второй - папка с конфигами под каждую отдельную инсталяцию
в результате автоматом тянется приложение из SVN и после него накатывается конфиг именно под необходимую инсталяцию, та же последовательность и в процессе обновления приложения

Ответить