Kevin Sylvestre
Kevin Sylvestre

Reputation: 38032

New Relic 404, 422 and 500 Exceptions With Rails Dynamic Exception Handling

I'm running a Rails 4.0.0.rc application using New Relic for availability / exception monitoring. I modified application.rb with this snippet to enable dynamic exception pages:

config.exceptions_app = self.routes

However, I no longer see 404, 422 or 500 exceptions in New Relic. Any idea how I get them back?

Edit:

Note: this is what the controller handling the status looks like:

class ErrorsController < ApplicationController

  # GET /404
  def missing
    render status: 404
  end

  # GET /422
  def unprocessable
    render status: 422
  end

  # GET /500
  def exception
    render status: 500
  end

end

Upvotes: 3

Views: 2210

Answers (2)

thejonanshow
thejonanshow

Reputation: 131

It sounds like you want to call NewRelic::Agent.notice_error manually.

You can reconstruct the request object from the Rack env and build an exception however you would like.

Something like this:

request = Rack::Request(env)

options = {
  :uri => request.url,
  :referrer => request.referrer,
  :request_params => request.params
}

NewRelic::Agent.notice_error(your_custom_exception, options)

Note that the request parameters will be transmitted as is so be careful to filter anything sensitive.

Sources:
I work for New Relic as Ruby Agent Engineer
Documentation for NoticedError: http://rubydoc.info/gems/newrelic_rpm/frames

Upvotes: 4

jokklan
jokklan

Reputation: 3540

You will have to set the html status code to the correct value in your errors controller. If you for example have something like this:

class ErrorsController < ApplicationController

 # 404
 def not_found 
   render "not_found", status: 404
 end

end

Otherwise will rails render the error page with a 200 status code, and new relic will not pick it up as an error.

Upvotes: 0

Related Questions