Tag Archives: Cookie

Отладка проекта на продакшене

Бывают часто ситуации, когда после тестирования на деве обновляешь код на продакт сервере и внезапно оказывается что сайт не работает. При чем не всегда спасет и логирование ошибок. Фатал эроры к примеру туда не попадут.

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

Но для всех пользователей отображать ошибки конечно же неправильно, нужно как то отделить девелопера от остальных пользователей и показывать ошибки только ему.

В этом нам с легкостью поможет nginx (в апаче вроде можно сделать так же, но я им давно не пользуюсь).

Мы будем проверять наличие куки с определенным значением и если находим ее то выставляем переменную окружения APPLICATION_ENV в значение «development», а затем в коде по этому значению будем включать отображение ошибок.

Итак, редактируем файл /path/to/nginxconf/fastcgi_params (для freebsd это /usr/local/etc/nginx/fastcgi_params) и в конце дописываем:

set $appEnv 'production';
if ($http_cookie ~ "dev_cookie=secret_value" ) {
    set  $appEnv 'development';
}
fastcgi_param   APPLICATION_ENV  $appEnv;

Из этого понятно, что проверяться будет наличие куки с именем dev_cookie и значением secret_value. Конечно же для вашей реализации нужно изменить эти значения.

Установка переменной необходима потому как fastcgi_param нельзя использовать внутри if.

И после этого в коде используем такую небольшую конструкцию:

defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));

if (APPLICATION_ENV == 'development')
{
	error_reporting(E_ALL ^ E_NOTICE);
	ini_set('display_errors',1);
}
else
{
	error_reporting(0);
	ini_set('display_errors',0);
}

И если где то в коде еще потребуется разделять логику для девелопера/обычных посетителей то можем в любом месте делать проверку

(APPLICATION_ENV == 'development')

 

Теперь, если вам нужно включить для себя отображение ошибок вы должны в браузере для нужного сайта создать куку с именем dev_cookie и значением secret_value и все. Когда закончите отладку можете просто удалить куку.

Мое решение работает сразу для всех проектов на сервере. Если вам нужно сделать данный функционал только для одного проекта или части сайта то вы можете перенести код в соответствующую секцию конфигурации.