`
RunUpwind
  • 浏览: 91911 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

rails异常(错误)处理

阅读更多

方法1:http://www.uedidea.com/rails%E9%94%99%E8%AF%AF%E5%A4%84%E7%90%86.html

 

def add_to_cart
product = Product.find(params[:id])
rescue ActiveRecord::RecordNotFound #拦截Product.find()异常
logger.error("Attempt to access invalid product #{params[:id]}") #日志记录
flash[:notice] = "Invalid product" #notice 存放提示信息
redirect_to :action => "index" #跳转到index
end

begin
   @user.destroy
    flash[:notice] = "User #{@user.name} deleted"
rescue Exception => e #如果上面的代码执行发生异常就捕获
   flash[:notice] = e.message
end

 

begin
  raise ArgumentError, "Bad data"
rescue => err 
  puts err 
ensure
...                       #执行清理工作 
end  
 




方法2:around_filter  

http://hlee.iteye.com/blog/323025

 

    around_filter :rescue_record_not_found     
        
    def rescue_record_not_found     
      begin     
        yield     
      rescue ActiveRecord::RecordNotFound     
        render :file => "#{RAILS_ROOT}/public/404.html"    
      end     
    end    
 



   hlee 在文中还提到可以这样做:

    rescue_from ActiveRecord::RecordNotFound, with => :rescue_record_not_found     
        
    def rescue_record_not_found     
      render :file => "#{RAILS_ROOT}/public/404.html"    
    end    
 

方法3:rescue_action_in_public



参考:http://202.199.224.30/post/article/7

    def rescue_action_in_public(exception)      
        logger.error("rescue_action_in_public executed")      
        case exception      
        when ActiveRecord::RecordNotFound, ::ActionController::RoutingError,        
          ::ActionController::UnknownAction      
          logger.error("404 displayed")      
          render(:file  => "#{RAILS_ROOT}/public/404.html",      
          :status   => "404 Not Found")      
        else      
          logger.error("500 displayed")      
          render(:file  => "#{RAILS_ROOT}/public/500.html",      
          :status   => "500 Error")      
    #      SystemNotifier.deliver_exception_notification(self, request,        
    #                                                    exception)      
        end      
      end    

 



   注意:在不同环境中的配置,生产环境中,默认的配置应该就可以显示效果,但在开发模式下,需要确认/config/environments/development.rb中的



代码

config.action_controller.consider_all_requests_local = false   

 
如果在本机访问必须增加(app/controllers/application.rb):



代码

def local_request? 
  false 
end  
 


错误类型参考:

    DEFAULT_RESCUE_RESPONSE = :internal_server_error  
    DEFAULT_RESCUE_RESPONSES = {  
      'ActionController::RoutingError'             => :not_found,  
      'ActionController::UnknownAction'            => :not_found,  
      'ActiveRecord::RecordNotFound'               => :not_found,  
      'ActiveRecord::StaleObjectError'             => :conflict,  
      'ActiveRecord::RecordInvalid'                => :unprocessable_entity,  
      'ActiveRecord::RecordNotSaved'               => :unprocessable_entity,  
      'ActionController::MethodNotAllowed'         => :method_not_allowed,  
      'ActionController::NotImplemented'           => :not_implemented,  
      'ActionController::InvalidAuthenticityToken' => :unprocessable_entity  
    }  
      
    DEFAULT_RESCUE_TEMPLATE = 'diagnostics'  
    DEFAULT_RESCUE_TEMPLATES = {  
      'ActionView::MissingTemplate'       => 'missing_template',  
      'ActionController::RoutingError'    => 'routing_error',  
      'ActionController::UnknownAction'   => 'unknown_action',  
      'ActionView::TemplateError'         => 'template_error'  
    }  
 




又看了这篇贴子中的讨论:http://www.iteye.com/topic/708334
rails的错误处理还需要再研究。

 

分享到:
评论

相关推荐

    rails_exception_handler:Ruby on Rails的异常处理

    Rails异常处理程序 从版本1升级? 这是Rails的灵活异常处理程序,适用于希望创建自己的错误跟踪服务的人员。 它面向经验丰富的Rails开发人员,这些开发人员不仅要管理几个Rails应用程序,而且还要管理多个应用程序。...

    Ruby-Rails的异常通知插件

    在Ruby on Rails开发中,错误处理是至关重要的一个环节,因为它可以帮助开发者及时发现并修复问题,从而保持应用程序的稳定运行。"Ruby-Rails的异常通知插件"正是为了解决这个问题而诞生的。Exception Notification...

    rails 常见灵异错误汇总

    4. **未捕获的异常**:Rails使用`rescue_from`来处理未捕获的异常,但有时会遗漏某些特定类型的异常。确保在`ApplicationController`中设置合适的异常处理,以避免程序崩溃。 5. **环境变量问题**:在不同环境下...

    rails-api-4.0.0

    六、错误处理: API应该提供清晰的错误信息,以便客户端能够理解问题所在。可以通过rescue_from或自定义异常类来捕获和处理错误。 七、安全与认证: API的安全性至关重要。常见的安全策略包括OAuth2、JWT(JSON Web...

    Ruby-karafka基于ApacheKafka的Ruby和Rails应用程序开发框架

    7. **错误处理**:内置的错误处理机制可以帮助开发者优雅地处理异常,避免因单个消息处理失败而导致整个消费者崩溃。 **使用Ruby-Karafka进行开发的基本步骤:** 1. **安装和配置**:首先,需要在项目中添加Ruby-...

    Ruby-GemExceptionTrack捕捉Rails应用运行期的异常并存储到数据库

    在Rails应用的生命周期中,如果发生错误或异常,ExceptionTrack会捕获这些异常,然后不是简单地让程序崩溃,而是将异常信息保存起来。存储在数据库中的异常信息便于后期分析和问题定位,提高了开发团队的效率,尤其...

    Ruby和Rails高效的Kafka处理框架_Ruby_下载.zip

    3. **错误处理和恢复**:框架提供了内置的错误处理机制,确保即使在处理过程中出现异常,也能优雅地处理消息,避免数据丢失。 4. **线程和进程安全**:Karafka支持多线程和多进程消费,能够充分利用服务器资源,...

    ruby on rails API

    Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View...随着Rails的不断迭代,API开发的最佳实践也在不断完善,如更高效的数据序列化、更严格的错误处理和更好的版本管理策略。

    Rails3 使用rake启动后台任务

    8. **错误处理与日志记录**: 在后台任务中,确保捕获并记录异常,以便于调试。同时,使用日志记录工具(如 Logger 或 Rails 的 logging 功能)记录任务的执行过程。 9. **测试后台任务**: 应该为后台任务编写单元...

    Ruby on Rails 指南 v5.0.1 中文版

    - **异常处理**:介绍如何处理运行时异常。 - **强制使用HTTPS协议**:指导如何强制客户端使用HTTPS协议访问应用。 #### Rails路由全解 - **Rails路由的用途**:解释Rails路由系统的作用。 - **资源路由:Rails的...

    Rails Best Practices

    10. **错误处理与日志**:设置合适的错误处理机制,如使用`rescue_from`来捕获异常。合理使用Rails的日志功能,监控应用状态,便于问题排查。 11. **性能监控**:使用New Relic、Prometheus或自定义的性能指标监控...

    敏捷Rails中文教程

    - **异常处理**:Ruby的异常处理机制允许开发者优雅地捕获和处理程序中的错误。 - **多线程与并发**:Ruby支持多线程编程,但需要注意的是,由于全局解释器锁(GIL)的存在,真正的并行执行在默认的Ruby实现中受限。 ...

    RJS Templates for Rails

    5. **错误处理**:Rails的异常处理机制同样适用于RJS模板,可以通过`rescue`来捕获并处理可能出现的错误。 6. **库集成**:RJS模板与Prototype库紧密集成,可以轻松调用Prototype库提供的函数,如Ajax请求和DOM操作...

    exception_handler::bomb:自定义错误页面:bomb:Ruby on Rails→将RubyRails异常转换为品牌的4xx5xx HTTP错误页面

    由于Web浏览器(Rails是Web框架)只能解释,因此必须将Ruby / Rails异常转换为浏览器可以读取的内容。 这是通过调用上述中间件来完成的。 - 如突出显示的那样,HTTP响应的构建独立于Rails堆栈。 这包括分配HTTP...

    无线点餐系统的服务端,使用ruby on rails框架

    7. 错误处理和日志记录:通过使用如Rails的Action Controller的异常处理机制,确保系统在遇到问题时能够优雅地失败,并记录详细的错误日志供排查问题。 在"WirelessOrder-Server-master"这个压缩包中,可能包含了...

    ruby on rails 常用插件下载

    4. 错误处理:多线程环境下,错误处理变得更为复杂,需要确保每个线程的异常都能被正确捕获和处理。 5. 监控和调试:为了确保系统稳定,需要监控线程状态,防止死锁或资源泄露。 6. 测试:在生产环境部署前,需要...

    Ruby-Acl9一个Rails基于角色的授权系统

    如果权限不满足,Acl9会抛出异常,你可以捕获并处理这个异常来展示错误消息或重定向到其他页面。 6. **继承与嵌套**:Acl9支持角色之间的继承,这意味着你可以定义一个基础角色,然后让其他角色继承它的权限。此外...

    ajax-rails

    6. **错误处理**:Rails同样提供了处理Ajax请求出错的机制,可以设置回调函数来捕获和处理异常。 在实际开发中,明智地使用Ajax可以显著提升用户体验,但也要注意避免过度使用,因为过多的Ajax交互可能导致复杂性...

    rails2.3.2 ExceptionNotifier 配置

    ExceptionNotifier是Rails的一个非常有用的gem,它允许开发者在应用程序中捕获并通知异常情况,如错误或未处理的异常,这对于监控和调试生产环境中的应用至关重要。 ExceptionNotifier的主要功能是在发生异常时发送...

    Web.Services.on.Rails.

    6. 错误处理与版本控制:良好的错误处理可以提高API的健壮性,Rails可以通过自定义错误页或返回HTTP状态码来处理异常。版本控制确保在API升级时不会影响旧的依赖,Rails可以通过命名空间或者URL路径来实现版本管理。...

Global site tag (gtag.js) - Google Analytics