Вы можете создать представление в любом контроллере root_path:
map.root :controller => "foo", :action => "index"
Допустим, вы называете это представление "db_maintenance.html.erb". В вашем контроллере сделайте это:
def index
begin
@widgets = Widget.find(:all)
rescue Exception => e
# This will only happen if DB stuff fails
redirect_to :action => "db_maintenance", :error => e.message
end
end
...
def db_maintenance
@error = params[:error] # You might want to do something with this here or in the view
# renders the app/views/foo/db_maintenance.html.erb view
end
На ваш взгляд, вы можете поместить что-то вроде:
<h1>Sorry for the inconvenience</h1>
blah blah blah. This happened because of:
<pre><code><%= @error %>
Это, конечно, помогает, только если пользователь заходит на главную страницу вашего сайта, но вы можете легко экстраполировать его. Вы можете добавить действие «def db_maintenance» в контроллер приложения и вручную указать, какое представление оно также должно отображать. Это не идеально, но это должно сделать работу.