【发布时间】:2011-09-21 09:01:19
【问题描述】:
我是 Rails 开发的新手,我有一个关于处理未知操作的问题。处理这种错误的最佳方法是什么?
【问题讨论】:
标签: ruby-on-rails ruby error-handling
我是 Rails 开发的新手,我有一个关于处理未知操作的问题。处理这种错误的最佳方法是什么?
【问题讨论】:
标签: ruby-on-rails ruby error-handling
不要处理它。如果用户输入错误的 URL,当您切换到生产环境时,他将收到 404 错误。
您获得例外只是因为您处于开发环境中。
【讨论】:
显示 404 错误,用户输入了一个 URL,在该 URL 中您没有定义要处理的控制器(或路由)中的相应操作。它应该被视为用户输入example.com/controller/jbsandfodsafoiuaudsfbsadf87basdfgsadfdsa。
【讨论】:
在config/environments/development.rb 中,关闭consider_all_requests_local 并重新启动服务器。现在您将看到错误页面。完成设计后,重新打开 consider_all_requests_local 并重新启动服务器。
在生产中,人们会得到您设计的 404 页面。在开发中,您可以看到堆栈跟踪,以便您可以调试自己的错误。
【讨论】:
您应该可以使用默认的 Rails 处理,它将在您的公共目录中加载 404 文件。
【讨论】:
在生产模式下,将自动处理异常。 但在某些情况下,我们想要处理异常。在我们的例子中,我们为这些页面呈现一个特殊的布局。
在应用程序控制器中,您必须像这样拯救异常:
PAGE_NOT_FOUND_ERRORS = ActiveRecord::RecordNotFound, ActionController::RoutingError, ActionController::UnknownAction, ActionController::UnknownController
def rescue_action_in_public(exception)
case exception
when *PAGE_NOT_FOUND_ERRORS
render_404
else
render_500
end
end
def render_404
render :file => File.join(RAILS_ROOT, 'public', '404.html'), :status => 404, :layout => true
end
def render_500
render :file => File.join(RAILS_ROOT, 'public', '500.html'), :status => 500
end
【讨论】: