Это хорошая идея, чтобы "пинговать" мою базу данных, когда мое приложение загружается? - PullRequest
1 голос
/ 12 апреля 2011

Один из моих недавних вопросов ( здесь ) спрашивал о том, как перехватывать ошибки (и отображать их с помощью ErrorController) в файле Bootstrap.Пример, который я использовал, был во время создания базы данных: если в Bootstrap произошла ошибка, она просто сбросила бы ошибку на экран, не вызывая ErrorController.

Но, скажем, в моем плагине для создания экземпляров базы данных у меня есть этокод:

public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) {
    $db = Zend_DB::factory("Pdo_Mysql", $this->config);
    Zend_Registry::set("db", $db);
}

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

У меня вопрос, должен ли я сделать что-то вроде этого:

public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) {
    $db = Zend_DB::factory("Pdo_Mysql", $this->config);
    $db->getConnection();
    Zend_Registry::set("db", $db);
}

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

1 Ответ

3 голосов
/ 12 апреля 2011

Я бы настроил специфическую обработку типа исключения Zend_Db в моем контроллере ошибок.

PHP не поддерживает состояние, поэтому инициализация приложения будет происходить для каждого запроса страницы.Что если моему запросу на страницу даже не нужна БД (например, моя страница обслуживания, страницы ошибок и т. Д.)?

Самое главное, как правильно обрабатывать отсутствие соединения во время начальной загрузки?Как вы можете быть уверены, что любые другие ресурсы, необходимые для отображения страницы с ошибкой, закончили загрузку?

Однако это только мои предпочтения.

...