Rails rescue_from重新提升异常

时间:2012-12-11 18:15:57

标签: ruby-on-rails

我继承了一个项目,以前的开发人员将其添加到应用程序控制器中:

rescue_from Exception, :with => :render_500

我认为是抓住这个并呈现动态页面。静态页面是不可接受的,但我现在不确定为什么会这样。在任何情况下,这都会破坏我使用Exceptional捕获异常的能力。有没有办法在渲染动态错误页面后重新引发异常?

我试过了:

def rescue_from(exception)
  respond_to |format|
    format.html { #render the page# }
  end
  raise exception
end

然而,很明显,这不起作用。有什么想法吗?

3 个答案:

答案 0 :(得分:6)

您可以手动发布到例外 - 而不是尝试重新加注并获得捕获和发布的例外。

def rescue_from(exception)
  ::Exceptional::Catcher.handle(exception)
  respond_to |format|
    format.html { #render the page# }
  end
end

答案 1 :(得分:1)

你能否在开始或救援中提出异常并在确保中做出respond_to?

我在下面提供b),因为我不确定a)是否有效。显然你可以在b)示例中引发任何异常进入rescue块然后引发传入的异常。

要么:

a)

begin
 raise exception
ensure
  respond_to |format|
    format.html { #render the page }
  end
end

OR

b)

begin
  raise exception
rescue Exception => e
  raise e
ensure
  respond_to |format|
    format.html { #render the page }
  end
end

答案 2 :(得分:0)

这样的事情应该有效 -

rescue_from Exception, :with => :render_500

def rescue_500(exception)
    raise exception
end

查看docs,如果这不起作用,那么应该可以帮助您找到解决方案。