5

Dies ist mein erster Beitrag hier, also hoffe ich, dass ich diese Frage an den richtigen Ort stelle. Ansonsten lass es mich bitte wissen, damit ich das nächste Mal hier posten kann :)Ruby on Rails -HTTP Fehlerbehandlung

Ich arbeite an einer RoR-Website und würde gerne Serverfehler (400, 404, 500, etc.) einzeln behandeln. Da die Website dynamisch ist, möchte ich auch die Fehler in der Rails-Umgebung und nicht auf der Serverebene behandeln. Ein Beispiel für das, was ich tun möchte, könnte sein, dem Benutzer optionales Material oder eine Suchleiste zu präsentieren, wenn sie auf eine Seite oder eine Vorlage stößt, die nicht geladen wird oder einfach nicht existiert.

Ich bin neu bei RoR so bitte bitte mit mir, falls ich das offensichtliche frage.

Also, ich habe ein wenig gelesen und ich denke, dass die Verwendung der Exception Handler rescue_from ist der Weg in meinem Fall zu gehen. (Wäre mehr als glücklich zu hören, wenn einer von euch eine andere Meinung hat).

ich einen einfachen funktionierenden Prototyp (siehe Code unten) und läuft, aber ich erhalte eine Fehlermeldung, wenn ich folgende Exception-Handler, um den Code enthalten:

rescue_from ActionController::MissingTemplate,   :with => :not_found #404 

Jetzt kann ich nicht sehen dass ich einen Rechtschreibfehler habe und diese Zeile im Code im Internet gesehen habe. Allerdings, wenn ich es schließen erhalte ich die folgenden Routing-Fehler:

Routing Error No route matches "/errorhandle" with {:method=>:get} 

ich auf Schienen arbeitete 2.3.5, vielleicht, dass hat etwas damit zu tun?

Ich hoffe, dass Sie mir helfen können, etwas Licht auf dieses Problem zu werfen.

Prost! /Maja

class ApplicationController < ActionController::Base 

    helper :all # include all helpers, all the time 

    protect_from_forgery #See ActionController::RequestForgeryProtection for details 

    #ActiveRecord exceptions 
    rescue_from ActiveRecord::RecordNotFound, :with => :not_found #400 

    #ActiveResource exceptions 
    rescue_from ActiveResource::ResourceNotFound, :with => :not_found #404 

    #ActionView exceptions 
    rescue_from ActionView::TemplateError, :with => :not_found #500 

    #ActionController exceptions 
    rescue_from ActionController::RoutingError, :with => :not_found #404 

    rescue_from ActionController::UnknownController, :with => :not_found #404 

    rescue_from ActionController::MethodNotAllowed, :with => :not_found #405 

    rescue_from ActionController::InvalidAuthenticityToken, :with => :not_found #405 

    rescue_from ActionController::UnknownAction, :with => :not_found #501 

    # This particular exception causes all the rest to fail.... why? 
    # rescue_from ActionController::MissingTemplate, :with => :not_found #404 

    protected 
    def not_found 
     render :text => "Error", :status => 404 
    end 

    # Scrub sensitive parameters from your log 
    # filter_parameter_logging :password 
end 
+1

Können Sie uns die relevanten Routen von routes.rb anzeigen, falls vorhanden? – Trevoke

+0

Sure Trevoke, danke für die schnelle Antwort. Ich habe nichts zu routes.rb hinzugefügt, also denke ich, das ist ziemlich viel Standard. Datei: ActionController :: Routing :: Routen.draw do | map | map.resources: Errorhandlers # ... # viele Zeilen auf Kommentar # ... map.connect ': controller /: action /: id' map.connect ‚: controller /: action/: id.: format ' ende –

+0

uh, nicht sicher, wie man den Kommentar schön und ordentlich aussehen lässt * uark *. Hoffe, es ist sowieso lesbar ... –

Antwort

2

Werfen Sie einen kurzen Blick auf diese: http://www.ruby-forum.com/topic/47898

http://henrik.nyh.se/2008/09/404-invalid-rails-format

Insbesondere wird ein Beitrag in der ersten Link:

You can't use a regular 'rescue' keyword to rescue MissingTemplate exception.

Use rescue_action instead, for example:

def rescue_action(exception) 
    if ::ActionController::MissingTemplate === exception 
    render :text => 'rescued' 
    else 
    super 
    end 
end 

Kent.

+0

Vielen Dank Kent für Ihre Antwort und die Links, sie waren alle sehr hilfreich.Ich werde über die :: und allgemeine Ausnahmebehandlung in RoR nachlesen, um Ihre Antwort besser zu verstehen. ... und dann könnte ich noch ein paar Fragen stellen, wenn es Ihnen nichts ausmacht? Für jetzt - danke an euch alle, es ist großartig, Teil eines so aktiven Forums zu sein! /Maja –

+0

Ich bin nicht Kent - Kent ist derjenige, der diese Frage in der ersten Verbindung beantwortete :-) Gern geschehen. Auf jeden Fall mehr Fragen stellen, dafür ist diese Website da! (Lesen Sie zuerst das Dokument, natürlich). – Trevoke