Как Rails обрабатывает соединение с базой данных в фоновом режиме? - PullRequest
2 голосов
/ 30 ноября 2010

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

Но когда сам сервер выключен, rails требуется 3 минуты, чтобы выдать Mysql :: Error, и после 5-6 запросов весь сайт перестает отвечать.

Я попытался выяснить, какой метод в среде rails занимает так много времени, когда сервер mysql выключен. Это был метод connection.real_connect (в файле mysql_adapter активной записи), для возврата которого потребовалось 3 минуты с исключением.

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

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

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

Любая помощь будет очень полезна для меня

Спасибо

1 Ответ

4 голосов
/ 30 ноября 2010

Я не пробовал этого, но вы можете добавить connect_timeout в качестве одного из указанных параметров (вместе с портом, хостом и т. Д.) Для соединения MySQL в файле database.yml. Это значение передается в вызов real_connect для установления соединения с MySQL.

Кроме того, поскольку после установления первоначального соединения и при отключении БД возникает задержка, вам может потребоваться использовать параметр конфигурации read_timeout.

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