Что ж, лучший способ справиться с этим - убедиться, что база данных приложения никогда не выйдет из строя.Возможно, вы делаете это, подключаясь к другой базе данных, которая подчиняет ту, которая может подниматься и опускаться, так что если ведущий db падает, подчиненный продолжает, а затем обновляет / обновляет мастер, как только мастер возвращается.Тогда вы избавитесь от нестабильности мастер БД.Это лучшее решение.
Но, чтобы ответить на ваш вопрос:
В начале каждого запроса вам нужно посмотреть, работает ли база данных или нет, а затем отреагировать соответствующим образом.Например, если они пытаются сделать что-то, нуждающееся в БД, вам нужно перенаправить их куда-либо еще.
Я бы сделал это с before_filter в ApplicationController, что-то вроде
before_filter :requires_database
...
protected
def requires_database
redirect_to root_path unless database_is_up?
end
Youзатем можно игнорировать этот фильтр на страницах (предположительно, меньшинство страниц веб-сайта), которые не нуждаются в БД, с (например)
#in home_controller
skip_before_filter :requires_database
. Затем возникает проблема с тем, чтопроисходит, если БД падает на полпути через запрос.Это довольно ужасная ситуация, чтобы попытаться справиться с ней, я не буду вдаваться в подробности прямо сейчас.По сути, избегайте возможности, если сможете.