Ruby on rails 捕获RubyonRails中的初始化错误

Ruby on rails 捕获RubyonRails中的初始化错误,ruby-on-rails,exception-handling,Ruby On Rails,Exception Handling,我想做的是:如果数据库关闭,将用户重定向到一个特殊的错误页面 我正在使用带有OCI适配器的Oracle数据库 看起来,如果数据库不可用(例如,停止备份),则OCI适配器在我命中控制器之前抛出错误(根据堆栈跟踪,是在设置连接池时)。因此,我无法使用来自的rescue\u或rescue\u操作,即使在ApplicationController中,也无法到达救援线路 是否有任何方法可以在比ApplicationController更高的级别(或更早的点)上“包装”初始化或以其他方式挽救特定错误 尝试覆

我想做的是:如果数据库关闭,将用户重定向到一个特殊的错误页面

我正在使用带有OCI适配器的Oracle数据库

看起来,如果数据库不可用(例如,停止备份),则OCI适配器在我命中控制器之前抛出错误(根据堆栈跟踪,是在设置连接池时)。因此,我无法使用来自的
rescue\u或
rescue\u操作
,即使在ApplicationController中,也无法到达救援线路

是否有任何方法可以在比ApplicationController更高的级别(或更早的点)上“包装”初始化或以其他方式挽救特定错误

尝试覆盖,或者在堆栈上粘贴另一个中间件,您应该能够从那里捕获几乎所有的异常,并且可以随意捕获302

例如:

class DbFailsafe
  def new(app)
    @app = app
  end

  def call(env)
    @app.call(env)
  rescue DataBaseError => e
    [302, {"Content-Type" => "text/plain", "Location" => "http://otherserver.com/sorrt-the-site-is-down.html"}, ["You are being redirected to http://otherserver.com/sorrt-the-site-is-down.html"]]
  end
end
在您的环境中

config.middleware.insert_after ::ActionController::Failsafe, DbFailsafe
我建议(因为我们应该使用5xx而不是3xx)使用js重定向呈现简单页面。这很简单,只需编辑
public/500.html