Returnează un anumit cod de stare http în Rails (Programare, Ruby Pe Șine, Http, Coduri De Stare Http, Cod De Stare Http 503)

Sathish Manohar a intrebat.

Cum se returnează 503 Service indisponibil în Rails pentru întreaga aplicație?

De asemenea, cum faceți același lucru pentru anumiți controlori?

3 răspunsuri
iwasrobbed

Pentru întreaga aplicație:

# ApplicationController
before_filter :return_unavailable_status

private
  def return_unavailable_status
    render :nothing => true, :status => :service_unavailable
  end

Dacă ați dorit o pagină de eroare personalizată, ați putea face:

render 'custom_unavailable_page', :status => :service_unavailable    

Dacă nu o doriți pentru controlori specifici:

# SomeController
skip_before_filter :return_unavailable_status

Comentarii

  • Pentru a afișa o pagină de coborâre personalizată ar trebui să folosesc, render "custom_unavailable_page", , în loc de render :nothing => true –  > Por Sathish Manohar.
  • @SathishManohar Exact. custom_unavailable_page ar fi numele fișierului de vizualizare pe care îl veți reda. –  > Por iwasrobbed.
  • Unde este documentat acest lucru? Care sunt celelalte statusuri? api.rubyonrails.org/classes/ActionView/Helpers/… –  > Por Chloe.
  • @Chloe Nu cred că este documentat foarte bine, dar iată o listă apidock.com/rails/ActionController/Base/… –  > Por iwasrobbed.
  • AVERTIZARE DE DEPRECIERE: :nothing opțiunea este depreciată și va fi eliminată în Rails 5.1. Utilizați head pentru a răspunde cu un corp de răspuns gol –  > Por juliangonzalez.
Sergio Tulentsev

Puteți utiliza head

head 503
# or
head :service_unavailable

Comentarii

  • Pot folosi simboluri de stare precum :service_unavailable Toate stările: apidock.com/rails/ActionController/Base/… –  > Por freemanoid.
  • @freemanoid: Personal, îmi plac mai mult codurile întregi. Le cunosc deja. Nu este nevoie să memorez încă un set de valori. –  > Por Sergio Tulentsev.
  • AVERTIZARE DE DEPRECIERE: :nothing opțiunea este depreciată și va fi eliminată în Rails 5.1. Utilizați head pentru a răspunde cu un corp de răspuns gol –  > Por juliangonzalez.
  • @SergioTulentsev Aș actualiza doar răspunsul pentru a folosi head și dacă doriți să păstrați răspunsul original pentru posteritate, puneți-l mai jos ca „Răspuns original” sau ceva de genul acesta. Cred că suntem cu toții de acord că head este calea de urmat, mai ales că render nothing: true este depreciat pe versiunile actuale de Rails. –  > Por Joshua Pinter.
  • @JoshuaPinter: într-adevăr. la ce mă gândeam? –  > Por Sergio Tulentsev.
Frank Gracias

Următoarele funcționează pentru mine:

format.any { render :json => {:response => 'Unable to authenticate' },:status => 401  }

The :response pentru răspunsul HTML doar în cazul în care este accesat din browser.

Capul de randare 503 nu pare să funcționeze cu declarația de mai sus.

user7605325

Comentarii

  • Acest lucru ar fi rău pentru SEO. De exemplu, Google ar vedea acest lucru ca pe un site stricat, nu doar ca pe un site care a căzut temporar, dar care se așteaptă să fie din nou în funcțiune. Vedeți acest lucru: yoast.com/http-503-site-maintenance-seo –  > Por labirint.
  • Ar putea merita să schimbați acest lucru în „Service unavailable” / 503, astfel încât să se potrivească cu scopul întrebării. Presupun că este vorba de sintaxa „render head” care nu funcționează pentru tine, mai degrabă decât de codul de eroare? –  > Por mwfearnley.