Wie implementiert man dynamische 404, 500 usw. Fehlerseiten in Rails?

7

Wie implementiert man dynamische, benutzerdefinierte Fehlerseiten in Rails?

Zum Beispiel eine benutzerdefinierte 404-Fehlerseite, die Ihr application.html.erb-Layout und einige dynamische Felder auf der Seite verwendet.

Wie testet man das auch von einer lokalen Maschine?

    
Laz 03.06.2009, 05:02
quelle

5 Antworten

6

Sehen Sie sich Henrik Nyhs Post an. Andere können auch über Google gefunden werden.

Die Idee dahinter: Rails scheint public/404.html für 404 Fehler darzustellen.

  • Sie könnten die Seite dann überschreiben, wenn Sie ein statisches Feld
  • anzeigen möchten
  • Bei dynamischen Inhalten scheint es möglich zu sein, dass Sie eine Framework-Methode zum Einhängen und Weiterleiten zum Rendern Ihrer dynamischen Seite außer Kraft setzen können.

ActionController::Rescue definiert eine rescue_action_in_public , die render_optional_error_file aufruft.

    
Gishu 03.06.2009, 05:56
quelle
13

Ich habe ein paar Blog-Posts auf Google angeschaut, wie das geht, leider scheinen die meisten darauf zu vertrauen, dass Sie Ihren ApplicationController verschmutzen.

Stattdessen habe ich eine Vorlage mit der 404-Nachricht erstellt und dann diese Vorlage verwendet, um die public / 404.html-Datei von einer Rake-Aufgabe zu aktualisieren:

%Vor%

Jedes Mal, wenn ich mein globales Layout aktualisiere, wird die 404-Seite automatisch aktualisiert.

    
Tony Edgecombe 10.02.2010 13:52
quelle
9

Fügen Sie Ihrem ApplicationController Folgendes hinzu:

%Vor%

Sie können den Render-Aufruf anpassen (verwenden Sie Ihre Vorlagen, verwenden Sie ein Layout usw.) und fangen Sie auf diese Weise Fehler ab. Jetzt fängt es fehlende Methode und record_not_found für Sie, aber vielleicht gibt es Fälle, in denen Sie eine 500 Error-Seite anzeigen möchten, so dass Sie einfach weitermachen können, verwenden Sie diesen Ansatz und machen Sie es für Sie fit.

Zum Testen von einer lokalen Maschine funktioniert es einfach so. Wenn Sie nur im Produktionsmodus arbeiten möchten, fügen Sie ein

hinzu %Vor%

und dir geht es gut.

    
Ole Spaarmann 03.06.2009 09:04
quelle
3

Wenn Sie eine dynamische 404-Seite (oder einen anderen Statuscode) erstellen möchten, entfernen Sie die entsprechende HTML-Datei aus /public (falls vorhanden)

    
Ryan Neufeld 05.06.2009 14:23
quelle
1

Auf der Testseite ist die Verwendung von Passenger und die Einstellung der Rails-Umgebung für die Produktion ein wirklich guter Weg (zumindest für Entwicklungszwecke) (oder "RailsEnv-Entwicklung" in der Site-Konfiguration auskommentieren). Zumindest können Sie so nachahmen, wie es in der Produktion funktioniert.

Aber um das zu erledigen, habe ich verschiedene Einstellungsdateien, die beim Start analysiert werden und abhängig von der Umgebung abgerufen werden. Eine der Einstellungen ist, ob Fehlerseiten angezeigt werden sollen (AppSettings.show_page_errors?). Dann habe ich in meinem Application Controller

%Vor%

Also, es ist im Allgemeinen auf die Standardeinstellungen eingestellt, aber manchmal muss ich wirklich sehen, was genau passiert, also kann ich es bei der Produktion ausschalten.

Der andere Schritt besteht darin, benutzerdefinierte Seiten zu verwenden. In meinem Fall habe ich Vorlagen basierend auf dem Fehler, die auch ein Formular enthalten, um an Google Formulare zu senden (da mein Server möglicherweise kaputt ist). Um dies zu tun, setzen Sie dies (und ändern Sie es bei Bedarf) in Ihren Application Controller:

%Vor%

Dadurch werden die Statuscodes 404, 422 und 500 mithilfe der Vorlage gerendert, ansonsten wird unbekannt verwendet. Wenn Sie mit anderen umgehen müssen, müssen Sie nur diese Methode aktualisieren und die Vorlage hinzufügen.

    
Spencer Dillard 17.09.2010 07:06
quelle

Tags und Links