2012-11-06 4 views
7

Per diesem Beitrag:Rescuing Fehler in Rails 3.2 mit `config.exceptions_app = self.routes`

http://blog.plataformatec.com.br/2012/01/my-five-favorite-hidden-features-in-rails-3-2/

Die neueste Art und Weise Fehler zu behandeln wie folgt aussieht:

# application.rb: 
config.exceptions_app = self.routes 

#routes.rb 
match "/404", to: "site#not_found" 

jedoch Er spricht nicht die Tatsache, dass die Schienen Fehler App auch behandelt 500 Fehler, 422 Fehler (und möglicherweise andere Fehler trichtered zu diesen beiden Seiten?)

Also ich habe gehackt zusammen eine Lösung, die wie folgt aussieht:

# routes.rb 
rack_error_handler = ActionDispatch::PublicExceptions.new('public/') 
match "/422" => rack_error_handler 
match "/500" => rack_error_handler 

Es gut ist, dass es meine 500 Seiten angenehm leichter.

Gibt es andere Fehler, die ich auch fangen sollte? Mein Verständnis ist, dass, obwohl die 500-Seite jetzt zwei Rack-Apps verwenden wird, es noch sicher genug von der Rails-App genug isoliert ist. Ist das stark?

Danke!

+0

Für Schienen 4: http://blog.grepruby.com/2015/04/custom-error-pages-with-rails-4.html – user3118220

Antwort

1

ich hinzufügen, die Rettung froms in der Applikationssteuerung

if Rails.env.production? 
    rescue_from ActiveRecord::RecordNotFound, :with => :render_not_found 
    rescue_from ActionController::RoutingError, :with => :render_not_found 
    rescue_from ActionController::UnknownController, :with => :render_not_found 
    rescue_from ActionController::UnknownAction, :with => :render_not_found 
    rescue_from ActionView::MissingTemplate, :with => :render_not_found 
    end 

    def render_not_found(exception) 
    logger.info("render_not_found: #{exception.inspect}") 
    redirect_to root_path, :notice => 'The page was not found.' 
    end 

und dann einen errors_controller fügen Sie die Route Fehler, diese zu Grunde meiner Route

match "*path", :to => "errors#routing_error" 
+0

beachten Sie, dass die 'rescue_from 'Block akzeptiert eine Reihe von Argumenten, vereinfacht dies weiter: http://code-worrier.com/blog/error-pages-in-rails/ –

+0

das Spiel alle Route am Ende scheint zu hackish zu mir .. nichts für ungut aber irgendwelche Gedanken, irgendjemand? – dewdrops

1

Versuchen Sie, diese

Datei zu retten

Aktualisieren config/application.rb

config.exceptions_app = self.routes 

und Ihre Route Datei

match "/404", :to => "errors#not_found"