Rails Rescue 500 Error
Contents |
here for a quick overview of the site Help Center Detailed answers to any questions you might have Meta Discuss the workings and policies of this site About Us Learn more about Stack Overflow the company Business Learn more rails raise 500 about hiring developers or posting ads with us Stack Overflow Questions Jobs Documentation Tags Users
Rescue_from Rails 4
Badges Ask Question x Dismiss Join the Stack Overflow Community Stack Overflow is a community of 6.2 million programmers, just like you, helping each
Rails Render 500 Json
other. Join them; it only takes a minute: Sign up rescue 500 error without messing Airbrake up up vote 5 down vote favorite 1 I have Airbrake installed on my Rails app. However, I also want to perform
Rails Raise Internal Server Error
some other actions when a 500 occurs. How do I rescue 500 errors without interfering with Airbrake? ruby-on-rails airbrake share|improve this question asked Nov 22 '12 at 12:48 bevanb 2,57742954 add a comment| 1 Answer 1 active oldest votes up vote 8 down vote accepted One way you can do this in your ApplicationController, you can put unless Rails.application.config.consider_all_requests_local rescue_from Exception, with: :render_500 end and later, a new render_500 method def render_500(ex) notify_airbrake(ex) # render your template/message rails standard error end share|improve this answer edited Dec 7 '12 at 13:02 answered Nov 22 '12 at 13:05 deefour 24.5k46372 1 Cool. Had to do unless Rails.application.config.consider_all_requests_local, but otherwise works. –bevanb Dec 7 '12 at 0:08 What version of Rails are you using? I'll happily update my answer to reflect this if it's current. –deefour Dec 7 '12 at 0:10 I'm using 3.2.9. I think the version I provided works for Rails 3 in general. –bevanb Dec 7 '12 at 10:03 add a comment| Your Answer draft saved draft discarded Sign up or log in Sign up using Google Sign up using Facebook Sign up using Email and Password Post as a guest Name Email Post as a guest Name Email discard By posting your answer, you agree to the privacy policy and terms of service. Not the answer you're looking for? Browse other questions tagged ruby-on-rails airbrake or ask your own question. asked 3 years ago viewed 875 times active 3 years ago Blog Stack Overflow Podcast #92 - The Guerilla Guide to Interviewing Related 2How to add some extra parameter in the airbrake parameters for JS errors2Airbrake and mountable engines1Ruby on Rails 2.3.8 - Airbrake Ignore by IP Address0Airbrake / errbit1Rails app with Airbrake - 401 unauthroized0notify_airbrake throws error on custom classes3Rails airbrake undefined method0Using Airbrake in Rails projekt got error while testing0airbrake c
here for a quick overview of the site Help Center Detailed answers rails rescue_from example to any questions you might have Meta Discuss the workings rails 500 error page and policies of this site About Us Learn more about Stack Overflow the company Business rails raise 404 Learn more about hiring developers or posting ads with us Stack Overflow Questions Jobs Documentation Tags Users Badges Ask Question x Dismiss Join the Stack http://stackoverflow.com/questions/13513086/rescue-500-error-without-messing-airbrake-up Overflow Community Stack Overflow is a community of 6.2 million programmers, just like you, helping each other. Join them; it only takes a minute: Sign up Internal Server Error 500 gets thrown instead of 404 while trying to access broken picture urls up vote 10 down vote favorite 7 We http://stackoverflow.com/questions/10280692/internal-server-error-500-gets-thrown-instead-of-404-while-trying-to-access-brok have a rails server with custom 404 and 500 pages setup using this tutorial here: http://ramblinglabs.com/blog/2012/01/rails-3-1-adding-custom-404-and-500-error-pages While it works nice and throws 404s for all kinds of paths, it generates internal server errors 500 while trying to access any kind of suffixed path like en/foo.png, en/foo.pdf, en/foo.xml, ... But something like en/file.foo throws 404. So only valid suffixes throw a 500. End of routes.rb: if Rails.application.config.consider_all_requests_local match '*not_found', to: 'errors#error_404' end application_controller.rb unless Rails.application.config.consider_all_requests_local rescue_from Exception, with: :render_500 rescue_from ActionController::RoutingError, with: :render_404 rescue_from ActionController::UnknownController, with: :render_404 rescue_from ::AbstractController::ActionNotFound, with: :render_404 rescue_from ActiveRecord::RecordNotFound, with: :render_404 end protected def render_404(exception) @not_found_path = exception.message respond_to do |format| format.html { render template: 'errors/error_404', layout: 'layouts/application', status: 404 } format.all { render nothing: true, status: 404 } end end def render_500(exception) logger.fatal(exception) respond_to do |format| format.html { render template: 'errors/error_500', layout: 'layouts/application', status: 500 } format.all { render nothing: true, status: 500} end end
rescue_action_in_public if your site is in production giving you the familiar generic Rails error code. If you’re in development, Rails calls rescue_action_locally http://mrchrisadams.tumblr.com/post/333036266/catching-errors-in-rails-with-rescuefrom giving you that handy, if somewhat ugly stack-trace. This is usually pretty servicable, but what if you want to serve different error pages in response to different errors? Say hello https://gist.github.com/1563416 to rescue_from As you’d expect from the method name, rescue_from lets you perform different actions in response to specific kind of exceptions. Add this code into your application_controller.rb file, and rails raise you’ll now serve 4 different templates depending on how things went wrong in your app. There’s one big gotcha here though: # serve 404 error pages to relevant ones, and fall back to 500 error for others unless ActionController::Base.consider_all_requests_local rescue_from Exception, :with => :render_500 rescue_from ActionController::RoutingError, :with => :render_another_template rescue_from ActionController::UnknownAction, :with => :render_unknown_stuff rescue_from ActiveRecord::RecordNotFound, :with => :render_404 end You rails rescue 500 need to remember to add the rescue_from instructions for responding to your default, general Exception first, then proceed to being more and more specific as you go further down the tree. The :with => :render_404 part usually calls a private method, with further instructions, like rendering certain templates, or filling the flash hash with a friendly error message. Once thing to remember here: You have to list rescue_from in ascending order of specificity. You need to do it this way because Rails returns the last matching rescue_from value, and if you had the basic Exception listed last like so… unless ActionController::Base.consider_all_requests_local rescue_from ActionController::RoutingError, :with => :render_another_template rescue_from ActionController::UnknownAction, :with => :render_unknown_stuff rescue_from ActiveRecord::RecordNotFound, :with => :render_404 rescue_from Exception, :with => :render_500 end … then you would only ever render a 500 template, because the rescue_from Exception, :with => :render_500 would clobber any previous matching rescue_from options. This more flexible approach doesn’t work with the wonderful exception notifier Hoptoad out of the box. Instead you need to call hoptoad manually like this when outlining what should happen with the :w