В rails Mysql.real_connect занимает около 3 минут на каждый запрос, когда сервер MySQL выключен - PullRequest
0 голосов
/ 29 ноября 2010

Я пытаюсь отобразить несколько статических страниц в моем приложении rails, когда сервер mysql выключен. Я попытался перехватить исключение Mysql :: Error и отобразить соответствующую статическую страницу для каждого контроллера.

Когда мы просто останавливаем службу mysql на машине, где установлен mysql. Исключение Mysql :: Error генерируется немедленно, и я могу рендерить страницы без каких-либо задержек. но если я просто выключу сервер. Весь сайт перестает отвечать на запросы.

Я проследил фактическую функцию в структуре рельсов, которая занимает 3 минуты. Именно это утверждение

Mysql.real_connect

в драгоценном камне active_record. что занимает так много времени. Есть ли способ, которым я могу дать время, чтобы, когда сервер MySQL отключен. он очень быстро возвращает исключение Mysql :: Error, чтобы я мог рендерить страницы без задержки ??

Ответы [ 2 ]

1 голос
/ 27 мая 2011
  dbh = Mysql.init
  dbh.options(Mysql::OPT_CONNECT_TIMEOUT, 6)
1 голос
/ 29 ноября 2010

Вероятно, это происходит из-за тайм-аута сокета в адаптере mysql. Когда служба остановлена, сервер быстро ответит с ошибкой соединения отказано. Когда сам сервер не работает, сокет должен получить тайм-аут соединения, прежде чем он вернется. Что вам, вероятно, придется сделать, - это установить обезьяной исправление метода #real_connect, чтобы он сначала проверил, что сервер работает, пытаясь подключиться к сокету (с тайм-аутом), прежде чем продолжить с первоначальной реализацией. Этот вопрос может вам там помочь:

Как установить время ожидания сокета в Ruby?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...