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?
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.
ActionController::Rescue
definiert eine rescue_action_in_public
, die render_optional_error_file
aufruft.
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.
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.
Wenn Sie eine dynamische 404-Seite (oder einen anderen Statuscode) erstellen möchten, entfernen Sie die entsprechende HTML-Datei aus /public
(falls vorhanden)
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.
Tags und Links ruby ruby-on-rails