I have a site I’m building that has the template dynamically chosen
upon some parameters of the request. There are cases where a nonexistent
template will be sent to the render method. For purposes of my
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
How can I override this behavior?
What is the justification for template missing to be treated as a 500
instead of 404 error?
I have a site I’m building that has the template dynamically chosen based
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
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
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
was failing to use global scope when specifying Missing Template. Here’s
if exception.kind_of? ::ActionController::MissingTemplate
render :status => 404, :text => (IO.read(File.join(RAILS_ROOT,
That code is effectively converting 500 errors from MissingTemplate into
errors just like other rails features. Excellent.
Notice the “::” before ActionController. Failing to include that results
the exception handler throwing an error of its own… which I didn’t