I have a site I'm building that has the template dynamically chosen based upon some parameters of the request. There are cases where a nonexistent template will be sent to the render method. For purposes of my application, this is not a serious, fatal error, but a simple HTTP 404 error code. Unfortunately, Rails disagrees, and it's sending a 500 error message in production. How can I override this behavior? What is the justification for template missing to be treated as a 500 error instead of 404 error?
on 2007-01-24 10:08
on 2007-01-24 10:18
http://6brand.com/rails-custom-404-pages Aaron Longwell escribió: > I have a site I'm building that has the template dynamically chosen based
on 2007-01-24 18:03
That site is similar to a lot of other stuff I've seen. It appears that catching missing method errors is a much more common problem than catching missing *template* errors. I can't use method_missing, because my error happens after the call to render (after the correct action method has begun executing)... and I don't believe template_missing exists... but I have found a (the?) solution. As it turns out, rescue_action_in_public can catch the MissingTemplate error, but I was not detecting the error properly in my previous attempts. I was failing to use global scope when specifying Missing Template. Here's what works: if exception.kind_of? ::ActionController::MissingTemplate render :status => 404, :text => (IO.read(File.join(RAILS_ROOT, 'public', ' 404.html'))) end That code is effectively converting 500 errors from MissingTemplate into 404 errors just like other rails features. Excellent. Notice the "::" before ActionController. Failing to include that results in the exception handler throwing an error of its own.. which I didn't notice before.