2013-05-17 16 views
5

Ich habe eine Rails app läuft auf nginx 1.2.0 und passagier 3.0.7. Ich möchte die benutzerdefinierten Fehlerseiten in der App "rails" (z. B. /rail_app/public/500.html) angezeigt bekommen, wenn der entsprechende http-Fehler in der App auftritt.rails app auf nginx + passagier zeigt keine benutzerdefinierten fehlerseiten

Hier ist meine aktuelle nginx Konfigurationsdatei:

http { 
    passenger_root /usr/lib/ruby/gems/1.8/gems/passenger-3.0.7; 
    passenger_ruby /usr/bin/ruby; 

    include  mime.types; 
    default_type application/octet-stream; 

    #access_log /opt/nginx/logs/access.log main; 

    sendfile  on; 
    #tcp_nopush  on; 

    server { 
     listen 80; 
     server_name localhost; 
     root /var/www/dashboard/current/public; 
     passenger_enabled on; 
     passenger_min_instances 1; 
#  listen 443; 
#  ssl on; 
#  ssl_certificate /opt/nginx/conf/server.crt; 
#  ssl_certificate_key /opt/nginx/conf/server.key; 
     error_page 500 502 503 504 /500.html; 
     location = /500.html { 
      root /var/www/dashboard/current/public/; 
     } 
    } 
} 

Diese Konfiguration zeigt nicht die Rails-Anwendung Kundenfehlerseite nicht nur den Statuscode an den Client http Fehler sendet.

Wer weiß, was es braucht, um nginx/passagier senden Sie die Rails app benutzerdefinierte Fehlerseite mit dem http-Fehlerstatuscode an den Client?

Antwort

0

Die Config Ich verwende:

error_page 500 502 503 504 /50x.html; 

location = /50x.html { 
    root html; 
} 
+0

Benjamin dank fehlt für die Antwort. Ich habe es versucht und es hat nicht funktioniert. Hier ist ein bisschen mehr Details über das, was ich zu erreichen versuche: Wenn die Datenbank ausfällt ... möchte ich, dass die Rails-App die benutzerdefinierte 500-Fehlerseite anzeigt, anstatt nur 500 an den Client zu senden. Vielleicht sollte ich die ActiveRecord-Ausnahme abfangen? nur nicht sicher wie. – Rafael

+0

Fehler im Prod-Protokoll: '/! \ FAILSAFE /! \ Fr Jun 14 10:29:18 -0400 2013 Status: 500 Interner Serverfehler Verbindung zum MySQL-Server unter '169.254.1.51' (113) nicht möglich /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.17/lib/active_record/connection_adapters/mysql_adapter.rb:620:in 'real_connect'' – Rafael

1

Bitte versuchen Sie folgendes:

# We use the x just because it is for all 5xx errors. 
error_page 500 502 503 504 /5xx.html; 
location = /5xx.html { 
    alias /var/www/dashboard/current/public/; 
} 

die Neukonfiguration root Richtlinie macht keinen Sinn, da es bereits gesetzt ist man vor angegeben auf den Pfad. Die alias stellt sicher, dass der spezifische Speicherort intern an einen anderen Speicherort im Dateisystem angepasst wird. Alle eingehenden Anfrageparameter sollten mitgereicht werden und wenn Ihre Rails App sich an dieser Stelle um Dinge kümmert, sollte sie antworten. Stellen Sie nur sicher, dass Ihre Rails-App nicht mehr mit einem 500-Status antwortet (ich weiß nicht, was dann passieren würde).

Verwandte Links

1

Du bist wahrscheinlich passenger_intercept_errors on; in Ihrem nginx Config

siehe passenger docs für diese Richtlinie für weitere Informationen

Verwandte Themen