Ruby 是一门动态脚本语言,为了保证项目的可用性、可靠性、稳定性,开发者必须写单元测试,用以保证代码的质量。 单元测试不是万能的,项目在生产环境下,往往会遇到各种奇葩、离奇的问题,导致运行时,系统抛出异常。 为了能够实时的监控系统的运行情况,在发生异常时,及时处理,修复系统。非常有必要对 Ruby 的项目,增加运行时,异常捕获的程序处理。
Rails < 3 请使用ExceptionLogger 这个 Gem 将异常捕获,并写入 DB,在通过页面读取 DB,展示在网页上。比较直观,但是无法保证实时性。 Rails 3.1 or greater,使用Exception Notification 这个 Gem 灵活的多,可以将异常发送给邮件,发送到线上聊天室;发送通知的过程,可以方便的与异步进程集成。
部分代码如下。
# 生成 config/initializers/exception_notification.rb rails g exception_notification:install require 'exception_notification/rails' ExceptionNotification.configure do |config| # Ignore additional exception types. # ActiveRecord::RecordNotFound, AbstractController::ActionNotFound and ActionController::RoutingError are already added. # config.ignored_exceptions += %w{ActionView::TemplateError CustomError} # Adds a condition to decide when an exception must be ignored or not. # The ignore_if method can be invoked multiple times to add extra conditions. config.ignore_if do |exception, options| not Rails.env.production? end config.add_notifier :email, { :email_prefix => "[Tibet.zou.cn ERROR] ", :sender_address => %{"Notifier"}, :exception_recipients => %w{manageyp@gmail.com} } end # config environments.rb config.action_mailer.raise_delivery_errors = false config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { address: 'smtp.gmail.com', port: 587, domain: 'tibt.zou.cn', user_name: 'manageyp@gmail.com', password: 'Your password', authentication: 'plain', enable_starttls_auto: true }
2014-10-20