MegaMufa
@MegaMufa

PHP: Как отличить тестовую и рабочую версию приложения в консоли?

Добрый день.

Есть сайт на yii. И как положено все версии конфигурации: одна - тестовая, вторая рабочая. Отличаются активной базой данных и систелама логов.

Как подключать нужную конфигурацию для web-части понятно - можно отличить по имени хоста.
if ($_SERVER['HTTP_HOST'] === '192.168.0.100') {
    define('YII_DEBUG', true);
    ini_set('display_errors', 1);
    error_reporting(E_ALL);
}


А как отличать на каком сервере находится приложение во время запуска консольных скриптов из крона?
  • Вопрос задан
  • 3640 просмотров
Решения вопроса 1
Можно для тестового окружения создавать в корне файлик, например, "development". И дальше примерно так (index.php):
if(file_exists('development')){

	defined('YII_DEBUG') or define('YII_DEBUG', true);
	defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL', 3);

	$yii = dirname(__FILE__) . '/../../yii/framework/yii.php';

	$config = dirname(__FILE__) . '/protected/config/dev.php';

}else{

	defined('YII_DEBUG') or define('YII_DEBUG', false);

	$yii = dirname(__FILE__) . '/../../../yii/framework/yiilite.php';
	$config = dirname(__FILE__) . '/protected/config/production.php';

}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
miraage
@miraage
Старый прогер
Создавайте переменные окружения в настройке apache/nginx, а в скриптах используйте

if ($_SERVER['APP_ENV'] === 'dev') { // или prod, test
   // ....
}
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
у yii нету разделения на окружения по сути. Там есть только внутренняя переменная YII_DEBUG которая влияет по умолчанию только на компоненты фреймворка. Настройки логирования и разделение конфигов по окружениям - это ваша забота, вы можете сделать это дело как на основе проверки константы YII_DEBUG, так и своими силами (разные конфиги для разных окружений, кастыли из array_merge и т.д).

Я для своих проектов использую тот же подход что и в symfony. Конфиги хранятся в yml, общие части вынесены в config.yml, входная точка загружает config_prod или config_dev в зависимости от окружения требуемого. Дальше уже бутстрапер сам компилит конфиг, или же забирает его из кэша, ну и все.

По поводу консольных команд - логичнее их запускать в dev окружении (скажем что бы нивелировалось влияние кеширования каких-то данных или что там у вас может отличаться в настройках). Вы можете так же добавить в точку входа в консольное приложение какой-нибудь дополнительный аргумент аля --debug или --no-debug что бы переключать окружение.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы