HTTP错误处理 [英] HTTP error handling
问题描述
这是我在这里的第一篇文章,所以我希望我将这个问题发布到正确的位置。否则,请告诉我,以便我知道下次我在这里发帖:)
我在RoR网站上工作,想要处理服务器错误(400, 404,500等)。此外,由于网站是动态的,我想在rails环境中而不是在服务器级别处理错误。
我想做的一个例子就是当用户碰到一个无法加载或根本不存在的页面或模板时,向用户展示可选材料或搜索栏。
所以,我做了一些阅读,我认为使用rescue_from异常处理程序是我的理由。 (非常乐意听到你们是否有不同意见)。
我有一个简单的工作原型(见下面的代码)启动并运行,但是,当我在代码中包含以下异常处理程序时出现错误:
rescue_from ActionController :: MissingTemplate,:with => :not_found#404
现在,我看不出我有拼写错误而且我看过这行代码发布在网上。但是,当我包含它时,我收到以下路由错误:
路由错误没有路由匹配/ errorhandle与{:方法=>:get}
我正在使用rails 2.3.5,也许这已经得到了一些东西用它做什么?
我希望你能帮助我解决这个问题。
干杯!
/ Maja
class ApplicationController< ActionController :: Base
helper:all #include all helpers,
protect_from_forgery #See ActionController :: RequestForgeryProtection for details
#ActiveRecord例外
rescue_from ActiveRecord :: RecordNotFound,:with => :not_found#400
#ActiveResource exceptions
rescue_from ActiveResource :: ResourceNotFound,:with => :not_found#404
#ActionView例外
rescue_from ActionView :: TemplateError,:with => :not_found#500
#ActionController异常
rescue_from ActionController :: RoutingError,:with => :not_found#404
rescue_from ActionController :: UnknownController,:with => :not_found#404
rescue_from ActionController :: MethodNotAllowed,:with => :not_found#405
rescue_from ActionController :: InvalidAuthenticityToken,:with => :not_found#405
rescue_from ActionController :: UnknownAction,:with => :not_found#501
#这个特殊的例外导致所有其他的失败....为什么?
#rescue_from ActionController :: MissingTemplate,:with => :not_found#404
protected
def not_found
render:text => 错误,:status => 404
结束
#从日志中清除敏感参数
#filter_parameter_logging:密码
结束
快速浏览一下:
http://www.ruby-forum.com/topic/47898
http://henrik.nyh.se/2008/09/404-invalid-rails-格式
特别是第一个链接中的帖子:
你不能使用常规'rescue'关键字来拯救MissingTemplate
例外。
使用rescue_action代替,例如:
def rescue_action(exception)
if :: ActionController :: MissingTemplate === exception
渲染:text => '获救'
其他
超
结束
结束
< blockquote>
Kent。
This is my first post here, so I hope that I am posting this question the right place. Otherwise, please let me know so that I know for next time I post here :)
I am working on a RoR website and would like to handle server errors (400, 404, 500, etc.) individually. Also, since the website is dynamic I would like to handle the errors within the rails environment rather than at the server level. An example of what I would like to do could be to present the user with optional material or a search bar when she bumps into a page or template that will not load or simply does not exist.
So, I did a bit of reading and I think that using the rescue_from exception handler is the way to go in my case. (Would be more than happy to hear if any of you have a different opinion).
I have a simple working prototype (see code below) up and running, however, I get an error when I include the following exception handler to the code:
rescue_from ActionController::MissingTemplate, :with => :not_found #404
Now, I can't see that I have a spelling error and I have seen this line in code posted on the web. However, when I include it I get the following routing error:
Routing Error No route matches "/errorhandle" with {:method=>:get}
I am working on rails 2.3.5, perhaps that has got something to do with it?
I hope that you can help me shed some light on this issue.
Cheers! /Maja
class ApplicationController < ActionController::Base
helper :all # include all helpers, all the time
protect_from_forgery #See ActionController::RequestForgeryProtection for details
#ActiveRecord exceptions
rescue_from ActiveRecord::RecordNotFound, :with => :not_found #400
#ActiveResource exceptions
rescue_from ActiveResource::ResourceNotFound, :with => :not_found #404
#ActionView exceptions
rescue_from ActionView::TemplateError, :with => :not_found #500
#ActionController exceptions
rescue_from ActionController::RoutingError, :with => :not_found #404
rescue_from ActionController::UnknownController, :with => :not_found #404
rescue_from ActionController::MethodNotAllowed, :with => :not_found #405
rescue_from ActionController::InvalidAuthenticityToken, :with => :not_found #405
rescue_from ActionController::UnknownAction, :with => :not_found #501
# This particular exception causes all the rest to fail.... why?
# rescue_from ActionController::MissingTemplate, :with => :not_found #404
protected
def not_found
render :text => "Error", :status => 404
end
# Scrub sensitive parameters from your log
# filter_parameter_logging :password
end
Take a quick look at these: http://www.ruby-forum.com/topic/47898
http://henrik.nyh.se/2008/09/404-invalid-rails-format
In particular, a post in the first link:
You can't use a regular 'rescue' keyword to rescue MissingTemplate exception.
Use rescue_action instead, for example:
def rescue_action(exception)
if ::ActionController::MissingTemplate === exception
render :text => 'rescued'
else
super
end
end
Kent.
这篇关于HTTP错误处理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!