例外通知- exception_notification 4.0.1和Rails 3.2.8不工作



我试图让exception_notification和rails一起工作。我看了一堆其他的问题,并通过ReadMe在exception_notification gem页面上大量阅读。然而,大多数其他教程和问题似乎都过时了一年左右,在主要版本切换到4.0之前。更奇怪的是,正确的电子邮件似乎是在开发模式下发送的,而不是在生产模式下,这是我真正想要的。

相关代码如下:

我安装了gem 'exception_notification',正如它在ReadMe中所说的。

然后……内部配置/环境/production.rb

Whatever::Application.configure do

  config.action_mailer.raise_delivery_errors = true
      config.action_mailer.delivery_method = :smtp
      config.action_mailer.smtp_settings = {
        :address              => "smtp.gmail.com",
        :port                 => 587,
        :user_name            => 'blah@blah.com',
        :password             => 'blahblah',
        :authentication       => 'plain',
        :enable_starttls_auto => true
      }
      config.action_mailer.perform_deliveries = true
      config.action_mailer.default_url_options = {
        :host => 'www.blah.com'
      }
      ActionMailer::Base.default :from => 'BlahApp <reply@blah.com>'
      Paperclip.options[:command_path] = "/usr/bin/"
      config.middleware.use ExceptionNotification::Rack,
        :email => {
          :email_prefix => "[Error!] ",
          :sender_address => %{<reply@blah.com>},
          :exception_recipients => ['"Test Recipient" <tester@blah.com>', '"Test 2" <test2@gmail.com>'],
        }

正如我所说,当我复制/粘贴到开发。它似乎可以正常工作并发送电子邮件(尽管我实际上并没有收到它们,Paperclip可以捕获它们并在浏览器中打开它们,它们有我想要的东西)。然后在生产中,什么也没有发生,当我检查日志文件时,它似乎甚至没有尝试发送电子邮件。没有收到错误,除了我故意抛出的错误。

我看到有一些问题与SMTP的东西,所以我也尝试直接把smtp_settings直接到ExceptionNotification的电子邮件配置哈希(同时仍然有相同的设置外面),但没有运气。

我觉得我错过了一些愚蠢的东西。它应该非常简单易用。任何想法吗?很多谢谢!

好的,所以问题显然是以前的开发者(我继承了这个项目)已经设置了一种不同类型的错误捕获,只是呈现不同的错误页面。该函数只在生产环境中运行,并且它阻塞了对exception_notification的调用,这就是为什么它在生产环境中没有做任何事情,但在开发环境中工作得很好。所以…最后我所做的就是……

在app中…这已经在controllers/application_controller中了。rb文件:

unless Rails.application.config.consider_all_requests_local
    #Commenting this would show user a blank page but also show a detailed error message. Don't do this
    #Unless absolutely necessary.
    rescue_from Exception, with: lambda { |exception| render_error 500, exception }
    rescue_from ActionController::RoutingError, ActionController::UnknownController, AbstractController::ActionNotFound, ActiveRecord::RecordNotFound, with: lambda { |exception| render_error 404, exception }
  end

render_error函数有一些渲染错误页面。因此,我添加了一个步骤来触发对exception_notification的调用,如下所示…

def render_error(status, exception)
    if (status != 404)
      ExceptionNotifier::Notifier
        .exception_notification(exception, options.merge(:env => env))
        .deliver
    end
    respond_to do |format|
      format.html { render template: "home/error_#{status}", layout: 'layouts/heropage', status: status }
      format.all { render nothing: true, status: status }
    end
  end

请在您的生产中添加Gemfile gem 'exception_notification', '4.1.0.rc1'。rb文件

      config.consider_all_requests_local = false
      config.action_mailer.raise_delivery_errors = true
      config.action_mailer.perform_deliveries = true
      config.action_mailer.delivery_method = :smtp
      config.action_mailer.default_url_options{host:'http://yourUrl.herokuapp.com/'     
       }
     config.action_mailer.smtp_settings = {
     address: "smtp.gmail.com",
     port: 587,
     domain: 'gmail.com',
     authentication: "plain",
     enable_starttls_auto: true,
     user_name: "youremail@gmail.com",
     password: "Password"
   }
    config.middleware.use ExceptionNotification::Rack,
     :email => {
     :email_prefix => "[Notifer] ",
     :sender_address => %{"Exception Notification" < sender@domain.com>},
     :exception_recipients => %w{first@domian.com second@domain.com } 
    }

相关内容

  • 没有找到相关文章

最新更新