Советы PHP-разработчика

Блог содержащий короткие заметки касающиеся программирования для web.

Отладка yii приложения на production сервере

Отладка yii приложения на production сервере

Иногда на боевом сервере проявляются ошибки, которые невозможно воспроизвести на тестовом или проблема является настолько критичной, что нет времени на разворачивание этой самой тестовой версии. Тогда возникает необходимость отладки "на живую" прямо на продакшене, но при этом остальные пользователи не должны видеть трейс ошибок и прочие "прелести" отладки. Сегодня я расскажу вам один из способов это осуществить на Yii Framework.

Для начала создаем файл конфигураций protected/config/dev-local.php, который расширит базовые настройки web приложения protected/config/main.php. В нем мы добавим вывод профайлера, включим вывод запросов и сольем с основным конфигом. Получится примерно следующий код:

<?php

$devConfig = array(
	'components' => array(
		'db' => array(
			'enableProfiling' => true,
        	'enableParamLogging' => true,
		),
		'log' => array(
			'class' => 'CLogRouter',
			'routes' => array(
				array(
					'class' => 'CProfileLogRoute',
		            'levels' => 'profile',
		            'enabled' => true,
				),
			),
		),
	),
);

return CMap::mergeArray(
	require(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'main.php'),
	$devConfig
);

Теперь необходимо подключать данный файл для разработчиков, борющихся с багом, который не терпит промедления. Для этого модифицируем файл /index.php следующим образом:

<?php

if (isset($_COOKIE['MySecretPasswordForDebugMode'])) {
	$yii = dirname(__FILE__) . '/path/to/yii.php';
	$config = dirname(__FILE__) . '/protected/config/dev-local.php';
	defined('YII_DEBUG') or define('YII_DEBUG', true);
	defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL', 3);
} else {
	$yii = dirname(__FILE__) . '/path/to/yiilite.php';
	$config = dirname(__FILE__) . '/protected/config/main.php';
}

require_once($yii);
Yii::createWebApplication($config)->run();

После этого остается всем разработчикам установить у себя куку MySecretPasswordForDebugMode в любое значение и заниматься устранением неполадок.

Можно придумать массу вариаций данной схемы. Например, подключать конфиг по IP или дописав в строку запроса kakoyto_proizvolny_parametr. Выбор за вами.

  • 2015-08-22 11:12:57