2011-12-12 13 views

risposta

6

404s possono essere gestiti con l'aiuto del metodo not_found come ad esempio:

not_found do 
    'Site does not exist.' 
end 

500s possono essere gestite chiamando il metodo errore con un blocco, ad esempio:

error do 
    "Application error. Pls try later." 
end 

I dettagli l'errore è accessibile tramite sinatra.error in request.env in questo modo:

error do 
    'An error occured: ' + request.env['sinatra.error'].message 
end 
+0

Come faccio a recuperare l'eccezione se è 500, voglio dire che cosa è andato storto? Grazie. – Jane

+0

@Jane vedere la mia risposta aggiornata – maprihoda

4

Ho avuto problemi a ottenere questo funzionamento fuori dalla scatola nel mio ambiente di sviluppo - per farlo funzionare, ho dovuto impostare show_exceptions su falso nella mia configurazione di Sinatra.

class BaseApp < Sinatra::Base 

    configure { set :show_exceptions, false } 

    error do |err| 
    raise "Error: #{err}" 
    end 

end 

Questa impostazione, se impostato su true, abilita pagine di errore che mostrano backtrace e informazioni di ambiente quando si verifica un'eccezione unhanded, ma ho potuto solo gli errori personalizzati Fire di disabilitarlo.

+1

Questa è la risposta corretta. Non funziona senza la riga di configurazione. – pmontrasio

+1

In realtà, entrambi ': show_exceptions' e': raise_errors' devono essere disabilitati (cioè, impostati su false) in modo che il blocco di errore generico (cioè, nessuna classe di eccezioni o codice di stato) sia eseguito e restituito. –

+0

Si noti che 'err' nell'esempio è il messaggio dell'eccezione, che può anche essere ottenuto da' env ['sinatra.error']. Message'. –

Problemi correlati