exception_notification 4.0.1和Rails 3.2.8无法正常工作

时间:2014-03-12 00:43:33

标签: ruby-on-rails-3 exception-notification

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

以下是相关代码:

我在自述文件中使用gem 'exception_notification'进行了安装。

然后......在config / environments / 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>'],
        }

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

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

我觉得我错过了一些愚蠢的东西。它应该是简单易用的。有什么想法吗?非常感谢!

2 个答案:

答案 0 :(得分:0)

好的,问题是显然以前的开发人员(我继承了这个项目)已经设置了一种不同类型的错误捕获,只是呈现了不同的错误页面。该函数仅在生产中运行,并且它阻止了对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

答案 1 :(得分:0)

请添加Gemfile gem 'exception_notification', '4.1.0.rc1'和您的production.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 } 
    }