Действие при недоступности БД

Есть режим обслуживания -> http://www.yiiframework.com/forum/index.php?/topic/3975-maintenance-mode/page__hl__maintenance__fromsearch__1

В конфиге catchAllRequests = контроллер\действие.

Как перенаправить запрос в контроллер при недоступности бд? Т.е. ошибка инициализации бд - показываем "сайт оффлайн".

напиши это в файле error.php и все

Кстати, хороший вопрос, почему при недоступности БД не выполняется пользовательский error.php? Вместо этого видим стандартное сообщение: "CDbException. ActiveRecord требует компонент приложения "db" CDbConnection". Я не хотел бы выдавать пользователю никаких технических текстов, как перехватить такие эксепшены?

Поддерживаю. Про


                

'errorHandler'=>array(

                        'errorAction'=>'site/error',

                ),



я знаю, но это не то, что надо (

updated:

в “самом главном” index.php комментируем строку: defined(‘YII_DEBUG’) or define(‘YII_DEBUG’,true);

и все ошибки "будут уходить" в errorHandler

Мне не помогло. define(‘YII_DEBUG’,true) закомментил, но при недоступности БД получаю системный CDbException, мой site/error не используется :(

Все должно работать, проверьте определяется ли где YII_DEBUG в других местах.

Еще может быть, что у вас в контроллере используются beforeAction/afterAction в которых идет работа с базой данных, я бы предложил их отключить для site/error. У меня так в коде. Вместо // … идет работа с бд, если убрать проверку на ‘site/error’, то вылезает стандартная страница с ексепшеном.




    public function beforeAction($action)

    {

        if ($this->id == 'site' && $action->id == 'error')

        {

            return true;

        }

        // ...

    }



Werewolf, спасибо, все оказалось еще проще: в самой error action я пытался перед выводом сообщения писать сообщение об ошибке в БД.