Ruby on Rails
HowtoConfigurareLaPaginaDiErroreDellaApplicazione

Errori e ambienti

Rails ha il concetto di Ambienti? per rappresentare gli stages del ciclo vitale di una applicazione (test, development, production di default). Gli errori sono gestiti appropriatamente per ogni livello di sviluppo. Gli ambienti di test e development forniscono una gestione degli errori utile allo sviluppatore, mentre l’ambiente production ritorna una pagina di errore con HTTP status 500 (Errore dell’applicazione).

ActionController::Rescue è il modulo che gestisce gli errori.

Pagine di errore nella applicazione

E’ possibile configurare la pagina di errore ritornata dalla nostra applicazione Rails, in modo globale o tramite un controller specifico. Combinando questi metodi si può avere una pagina di default, della quale si fa l’overriding in ogni controller per aver pagine specifiche.

Globalmente

Modificate il file /controller/application.rb:


  def rescue_action_in_public(exception)
    render :text => "<html><body><p>
Si è verificato un errore nel rispondere alla vostra richiesta.</p>
<!--  #{exception}  --></body></html>"
  end
  def local_request?
    false
  end

Controller specifico

Modificate il controller che volete che risponda agli errori in modo specifico implementando il metodo rescue_action_in_public:


  def rescue_action_in_public(exception)
    render :text => "<html><body>
<p>Si è verificato un errore gestito dal controller specifico nel rispondere alla vostra richiesta.</p>
<!--  #{exception}  --></body></html>"
  end

Questi esempi mostrano del testo semplice per le pagine di errore, ma ci sono molte altre possibilità (email, logging, redirects, ecc.) nel metodo rescue_action_in_public. (Si veda HowtoSendEmailWhenRailsThrowsAnException, per esempio).

Template dinamici per pagine di errore

Un’altra possibilità, invece di utilizzare del testo, è quella di fare il render di un template nel metodo rescue_action_in_public, per esempio:


  def rescue_action_in_public(exception)
    render :template => "controller/404"
  end

Pre-controller

Vedere HandlingPreControllerErrors.

Note

Impostare consider_all_requests_local a false

Mentre lavorate con questa funzionalità in locale avrete la necessità di assicurarvi che il vostro /config/environments/development.rb sia così settato:


config.action_controller.consider_all_requests_local = false

—-

Domanda: Ciò significa che non vi è una via semplice per definire la pagina di errore di default per un controller, una via che funzioni sia in development o in production o utilizzandola fuori da localhost?

Risposta: Questa via esiste. Ridefinendo il metodo rescue_action in application_controller.rb e questo verrà eseguito sia in development, production, su richiesta di un host remoto o da localhost. L’unica buona ragione per far questo è per mostrare un messaggio di errore più carino e specifico, assegnando il compito al metodo rescue_action_in_public. Mentre gli errori normalmente mostrati in development non sono attraenti, sono molto utili e contengono informazioni importanti per ritrovare errori nel codice.

—-

Ho scritto un piccolo tutorial riguardante “Come creare e gestire eccezioni in Ruby on Rails”: http://www.railsonwave.com/railsonwave/2007/1/19/howto-raise-and-rescue-exceptions-in-ruby-on-rails

—-

Vedere anche

categoria: Howto

>> Traduzione di Paolo Sangregorio