我刚刚进入Ruby / ROR但需要快速编写一个类来处理错误并使用它们做些什么。我已经能够找到我需要的其余部分的重要示例/教程但是我很难找到PHP的“set_error_handler”的最佳替代方案。
我的目标是:
我喜欢这个适用于任何ruby应用程序的工作,但我主要关注ruby-on-rails应用程序。谢谢你的建议。
答案 0 :(得分:0)
begin
#require all_kinds_of_things
"abc".size(1,2)
123.reverse
# rest of brilliant app
rescue Exception => e #Custom, catch-all exeption handler
puts "Doh...#{e}"
print "Do you want the backtrace? (Y) :"
puts e.backtrace if gets.chomp == "Y"
end
答案 1 :(得分:0)
定义ApplicationController#rescue_in_public(exception)
并将自定义处理代码放在那里。
这增强了Rails在顶层的默认异常处理 - 就在生成HTTP响应之前。随着您的Rails应用程序的复杂性增加并使用外部资源,您将需要处理更多异常,以便更接近抛出异常的位置,但这可以帮助您入门。
此方法仅适用于HTTP请求,并且不会捕获您创建的任何自定义rake任务或通过rails runner
执行的代码中的异常。
以下是我的一个应用程序的示例:
class ApplicationController < ActionController::Base
...
protected
def rescue_action_in_public (exception)
case exception
when ActionController::InvalidAuthenticityToken
if request.xhr?
render :update do |page|
page.redirect_to '/sessions/new/'
end
else
redirect_to '/sessions/new/'
end
when ActionController::NotImplemented
RAILS_DEFAULT_LOGGER.info("ActionController::NotImplemented\n#{request.inspect}")
render :nothing => true, :status => '500 Error'
else
super
end
end
end
答案 2 :(得分:0)
我认为Rails中最接近的等价物是rescue_from - 它允许你指定代码将捕获任何给定的异常(除了一些模板错误 - 尽管有一些方法)。如果你愿意,你可以把它交给其他一些班级。所以我猜你在你的案子中会做的是:
app / controllers / application_controller.rb中的:
class ApplicationController < ActionController::Base
rescue_from Exception do |e|
MyExceptionHandler.handle_exception(e)
end
end
lib / my_exception_handler.rb中的:
class MyExceptionHandler
def self.handle_exception exception
# your code goes here
end
end
如果有帮助,请告诉我,我会挖掘出如何捕获模板错误的链接。