Всем доброго времени суток!
Хотел бы написать свой рецепт, поделиться своей идеей, выслушать комментарии (мб это велосипед, говнокод или супер идея).
Итак, при разработке более менее серьезного проекта на Yii - каждую instance проекта нужно накатывать как минимум в 3х местах:
- локально (development) - разработка.
- тестовый сервер (testing) - иногда тестовых серверов может быть несколько.
- production
На каждом из серверов нужны разные настройки:
- соединение с БД, соединение с Memcache, Redis и пр
- логирование - локально вполне можно включать CWebLogRoute, CDbLogRoute и не нужен CEmailLogRoute. А на production не нужен CWebLogRoute, а нужен, например, CEmailLogRoute
- YII_DEBUG - нужно включать локально и выключать на production
Но есть такие настройки в config файлах, которые не относятся к текущему environment, а касаются только приложения, например, "urlManager", "import" и т.д.
Итак мое предложение...
Делаем 3 базовых конфига:
- main.php
- console.php (консольные скрипты)
- test.php (тесты, напр, unit tests)
Эти 3 файла будут в git'e (или другой VCS), но НЕ будут содержать локальные настройки подключения к БД, к Redis и т.д.
В этих 3 файлах будут лишь настройки приложения, например, "homeUrl", "import", "urlManager" и т.д.
Также в git'e в этой же папке будут лежать следующие 3 файла:
main.local.php.example
test.local.php.example
console.local.php.example
Они будут содержать в себе примеры локальных конфигураций.
Их нужно будет скопировать, убрать ".example" и поправить необходимые настройки.
Какие именно необходимые настройки (пример):
log (локально можно включать CDbLogRoute, CWebLogRoute; на production нужен CEmailLogRoute).
коннект к БД, к Redis, к Memcache, к sphinx и пр
gii (на production он не нужен)
...
Также будет сделан отдельный файл debug.local.php.example в папке config.
В нем будут только
defined('YII_DEBUG') or define('YII_DEBUG', false);
defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL', 3);
Его нужно будет также скопировать, убрать ".example" и поправить при необходимости.
Зачем "debug" выносить в отдельный файл? Разработчикам необходим debug локально - так значительно удобнее, а на production он должен быть выключен.
Организация конфигов
Организация конфигов
Последний раз редактировалось lpoolerl 2013.10.15, 11:49, всего редактировалось 1 раз.
Re: Организация конфигов
Хм, папки, параметр APP_ENV.... нагружает и запутывает.
Я обошёлся одним main и main.local, который занесён в gitignore.
В main записывается весь конфиг. В main.local только те опции, которые изменены для локального окружения:
main.php
main.local.php - у каждого окружения(сервер, локально, тестовый сервер, другой разработчик, третий разработчик..) свой. Переопределяем или добавляем только, то что нужно:
Я обошёлся одним main и main.local, который занесён в gitignore.
В main записывается весь конфиг. В main.local только те опции, которые изменены для локального окружения:
main.php
Код: Выделить всё
<?php
$pathLocalConfig = dirname(__FILE__) . '/main-local.php';
return CMap::mergeArray(
array(
'basePath' => dirname(__FILE__) . DIRECTORY_SEPARATOR . '..',
'preload' => array('log'),
'language' => 'ru',
'import' => array(
'common.components.*',
'common.extensions.*',
'common.models.*',
'application.components.*',
'application.controllers.*',
'application.models.*',
),
'components' => array(
'db' => array(
'connectionString' => '',
'username' => '',
'password' => '',
'schemaCachingDuration' => YII_DEBUG ? 0 : 86400000, // 1000 days
'enableParamLogging' => YII_DEBUG,
'enableProfiling' => YII_DEBUG,
'charset' => 'utf8',
),
'cache' => extension_loaded('apc') ? array(
'class' => 'CApcCache',
) : array(
'class' => 'CDummyCache',
),
'log' => array(
'class' => 'CLogRouter',
'routes' => YII_DEBUG ? array(
array(
'class' => 'CWebLogRoute',
),
) : array(),
),
'onBeginRequest' => create_function('$event', 'return ob_start("ob_gzhandler");'),
'onEndRequest' => create_function('$event', 'return ob_end_flush();'),
),
),
file_exists($pathLocalConfig) ? require $pathLocalConfig : array()
);
Код: Выделить всё
<?php
return array(
'name' => 'Skeleton Airly Local',
'components' => array(
'db' => array(
'connectionString' => 'mysql:host=localhost;dbname=ldb',
'username' => 'root',
'password' => '123',
),
)
);
-
- Сообщения: 1268
- Зарегистрирован: 2013.07.17, 17:37
Re: Организация конфигов
на самом деле если у вас несколько веток - хотфикс, претест, тест, мастер, дев, еще какието, то одним конфигом не отделаться (не беру в счет локальный)
Re: Организация конфигов
на самом деле я ветки регулирую с помощью git checkout, а не конфигами
-
- Сообщения: 1268
- Зарегистрирован: 2013.07.17, 17:37
Re: Организация конфигов
добавил ты фичу, прописал в конфиге, какого уя ей делать в мастере? а с единым конфигом так и будетyiijeka писал(а):на самом деле я ветки регулирую с помощью git checkout, а не конфигами
-
- Сообщения: 1268
- Зарегистрирован: 2013.07.17, 17:37
Re: Организация конфигов
на самом деле ответ действительно должен был зависеть от ситуации. Если ты 1 или вас 2-3 человека, то тут прав yiijeka. Ежели все серьезно и есть куча звеньев чтобы попасть в мастер и куча народа пушит и все это проталкивается из ветки в ветку, то тут уж кто на что
Re: Организация конфигов
Спасибо yiijeka за подсказку.
Действительно APP_ENV будет только путать.
Убрал из рассмотрения.
Небольшое уточнение насчет твоих примеров.
Ты в них берешь main-local и затем добавляешь к нему main.php.
Моя идея обратная - брать main.php и с помощью main-local.php переопределять все настройки environment (например, коннект к БД).
Действительно APP_ENV будет только путать.
Убрал из рассмотрения.
Небольшое уточнение насчет твоих примеров.
Ты в них берешь main-local и затем добавляешь к нему main.php.
Моя идея обратная - брать main.php и с помощью main-local.php переопределять все настройки environment (например, коннект к БД).
Re: Организация конфигов
"Моя идея" такая же:
В main записывается весь конфиг. В main.local только те опции, которые изменены для локального окружения: