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_page
wäre der Name der Ansichtsdatei, die Sie rendern würden.
:nothing
Option ist veraltet und wird in Rails 5.1 entfernt. Verwenden Sie head
Methode, um mit leerem Antwortkörper zu antworten
Sie können verwenden head
head 503
# or
head :service_unavailable
:nothing
Option ist veraltet und wird in Rails 5.1 entfernt. Verwenden Sie head
Methode, um mit leerem Antwortkörper zu antworten
head
und 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 head
der richtige Weg ist, zumal dies render nothing: true
bei aktuellen Rails-Versionen veraltet ist.
Folgendes funktioniert für mich:
format.any { render :json => {:response => 'Unable to authenticate' },:status => 401 }
Die :response
fü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