И так перейдем к примеру решения данной проблемы.
В папку /protected/config/
добавим 2 файла: mainLocal.php
и mainServer.php
.
Теперь у нас есть 3 файла с настройками. main.php
- содержит конфигурацию по умолчанию. mainLocal.php
- конфигурация для локальной машины. mainServer.php
- конфигурация для сервера.
В файле mainLocal.php
мы можем использовать настройки соединения с локальной базой данных, выводить отладочную информацию, включить модуль Gii
и многое другое.
Пример содержания файла mainLocal.php
:
<?php return CMap::mergeArray( require(dirname(__FILE__) . '/main.php'), array( 'modules' => array( 'gii' => array( 'class' => 'system.gii.GiiModule', 'password' => '123', 'ipFilters' => array('127.0.0.1', '::1'), ), ), 'components' => array( 'db' => array( 'connectionString' => 'mysql:host=localhost;dbname=localDBName', 'emulatePrepare' => true, 'username' => 'localDBUser', 'password' => 'localBDPassword', 'charset' => 'utf8', 'enableProfiling' => true, ), ), 'params' => array( //Дополнительные параметры для локальной машины ... ) ) );
Файл mainServer.php
будет содержать настройки подключения к рабочей базе данных и другие необходимые настройки приложения на сервере.
Пример содержания файла mainServer.php
:
<?php return CMap::mergeArray( require(dirname(__FILE__) . '/main.php'), array( 'components' => array( 'db' => array( 'connectionString' => 'mysql:host=localhost;dbname=serverDBName', 'emulatePrepare' => true, 'username' => 'serverDBUser', 'password' => 'serverDBPassword', 'charset' => 'utf8', 'enableProfiling' => true, ), ), 'params' => array( //Дополнительные параметры для сервера ... ) ) );
В корневой index.php
добавим проверку на то, где открывается приложение, локально или на сервере и какой файл конфигураций подключать:
<?php $yii = dirname(__FILE__) . '/framework/yii.php'; // Если путь к yii отличается, то перенесите это строку в условие if($_SERVER['REMOTE_ADDR'] == "127.0.0.1") { /** * В зависимости от настроек, боевой сервер может отдавать ip не внешний, а локальный (127.0.0.1), * тогда на сервере будет подключаться файл mainLocal.php, соответственно приложение не будет работать. * Это можно избежать заменив условие проверки на: * if ($_SERVER['HTTP_HOST'] != 'my-site-host.domain') { */ defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL', 3); $config = dirname(__FILE__) . '/protected/config/mainLocal.php'; } else { define('YII_DEBUG', false); $config=dirname(__FILE__) . '/protected/config/server_main.php'; define('YII_ENABLE_ERROR_HANDLER', false); define('YII_ENABLE_EXCEPTION_HANDLER', false); } require_once($yii); $app = Yii::createWebApplication($config)->run();
Вот и все, теперь приложение будет использовать нужные настройки в зависимости от места запуска.
Комментарии
А на сервер так прям и заливаете конфиги с конфигом базы - ведь в гит репозиторий он попадет в открытом виде - это не безопасно - при такой конфигурации
ОтветитьЕсли у вас репозиторий в github или bitbucket открытый, то ставте настройки базы в .gitignore, если закрытый, то уже на свое усмотрение
ОтветитьПодтверждаю!
Ответить