Wie können Sie 503 Service, der in Rails nicht verfügbar ist, für die gesamte Anwendung zurückgeben?
Wie machen Sie dasselbe für bestimmte Controller?
Wie können Sie 503 Service, der in Rails nicht verfügbar ist, für die gesamte Anwendung zurückgeben?
Wie machen Sie dasselbe für bestimmte Controller?
Antworten:
Für die gesamte Anwendung:
# ApplicationController
before_filter :return_unavailable_status
private
def return_unavailable_status
render :nothing => true, :status => :service_unavailable
end
Wenn Sie eine benutzerdefinierte Fehlerseite wünschen, können Sie Folgendes tun:
render 'custom_unavailable_page', :status => :service_unavailable
Wenn Sie es nicht für bestimmte Controller möchten:
# SomeController
skip_before_filter :return_unavailable_status
custom_unavailable_pagewäre der Name der Ansichtsdatei, die Sie rendern würden.
:nothingOption ist veraltet und wird in Rails 5.1 entfernt. Verwenden Sie headMethode, um mit leerem Antwortkörper zu antworten
Sie können verwenden head
head 503
# or
head :service_unavailable
:nothingOption ist veraltet und wird in Rails 5.1 entfernt. Verwenden Sie headMethode, um mit leerem Antwortkörper zu antworten
headund wenn Sie die ursprüngliche Antwort für die Nachwelt behalten möchten, geben Sie sie einfach unten als "ursprüngliche Antwort" oder so ein. Ich denke, wir können uns alle einig sein, dass dies headder richtige Weg ist, zumal dies render nothing: truebei aktuellen Rails-Versionen veraltet ist.
Folgendes funktioniert für mich:
format.any { render :json => {:response => 'Unable to authenticate' },:status => 401 }
Die :responsefür die HTML-Antwort, nur für den Fall, dass über den Browser darauf zugegriffen wird.
Der Renderkopf 503 scheint mit der obigen Anweisung nicht zu arbeiten.
render "custom_unavailable_page"anstelle vonrender :nothing => true