Что происходит с Symfony, когда база данных отключена? - PullRequest
2 голосов
/ 02 октября 2010

Что именно происходит, когда база данных, подключенная к symfony, отключается или недоступна? Возможно, ответ на этот вопрос мне в лицо, и я не понимаю этого, но я искал последнее время и все еще появляюсь с пустыми руками.

Я попытался смоделировать это сам (в «производственной» среде), просто остановив службу базы данных (я занимаюсь разработкой на моем ноутбуке с Windows - развертывание на сервере LAMP), но он просто оставался там до тех пор, пока превышен лимит времени выполнения PHP.

Я использую Symfony 1.4 с Doctrine. Можно было бы предположить, что это вызовет какое-то перехватываемое исключение или, возможно, даже сможет установить тайм-аут соединения, а затем выдать исключение. Я не могу удержаться от мысли о том, что клиент просто сидит там 30 секунд, ожидая, пока запрос к базе данных не завершится.

Если в ядре Symfony нет никаких превентивных мер, может кто-нибудь дать какие-либо предложения о том, как они справляются с этим? Конечно, в базе данных у меня будет монитор сердцебиения, но если он выйдет из строя, сайт тоже нужно будет отключить.

Обновление : собрал тестовый скрипт, чтобы просто подключиться к базе данных localhost через Mysqli, и он все еще достиг максимального времени выполнения. Тем не менее, он выдал предупреждение для сбой соединения.

- Логан

Ответы [ 2 ]

5 голосов
/ 02 октября 2010

Это зависит. Если к сайту обращаются в среде «dev», он выдаст вам внутреннюю ошибку 500 с сообщением, подобным этому: «Ошибка подключения PDO: SQLSTATE [HY000] [2002] Не удается подключиться к локальному серверу MySQL через сокет '/var/run/mysqld/mysqld.sock' (2) " и трассировка стека ниже этого (как обычные исключения в Symfony).

Если вы заходите на сайт в среде «prod», вы просто получаете стандарт (или пользовательский, если вы создали его на 500 ошибок): «Упс! Произошла ошибка Сервер вернул «500 Internal Server Error». «Без трассировки стека.

В любом случае генерируется исключение (которое можно перехватить). Это Doctrine_Connection_Exception. Вы, вероятно, захотите попробовать / перехватить это исключение вокруг вызова метода save () модели.

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

0 голосов
/ 02 октября 2010

У меня нет опыта работы с Symfony, но со стандартным PHP, если скрипт не может подключиться к MySQL, обычно он отображает кучу сообщений об ошибках.Почему это так долго, я не знаю, но мой сценарий обычно жалуется сразу.

...