Forum: Ruby on Rails Missing Template Should be 404 Error

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
9a52c510ac08aa74405a6aa4a6490751?d=identicon&s=25 Aaron Longwell (Guest)
on 2007-01-24 10:08
(Received via mailing list)
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?
C7d5bc5b054035d95f287797c2595694?d=identicon&s=25 Matias Surdi (Guest)
on 2007-01-24 10:18
(Received via mailing list)
http://6brand.com/rails-custom-404-pages





Aaron Longwell
escribió:
> I have a site I'm building that has the template dynamically chosen based
9a52c510ac08aa74405a6aa4a6490751?d=identicon&s=25 Aaron Longwell (Guest)
on 2007-01-24 18:03
(Received via mailing list)
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.
This topic is locked and can not be replied to.