2010-01-26 6 views
4

J'ai une classe d'applicationComment afficher les erreurs qui se produisent dans une application Sinatra modulaire hébergée par Passenger?

class MyApplication < Sinatra::Base 
    # ... do something ... 
end 

et un fichier config.ru

# ... load libraries ... 
run MyApplication 

J'utilise habituellement des passagers comme mon environnement de développement qui fonctionne parfaitement bien pour une normale - l'application Sinatra - non modulaire. Mais dans ce cas, je n'ai pas de sortie d'erreur à la place je reçois la page d'erreur interne du serveur par défaut qui n'est pas très utile. Est-il possible d'activer la gestion des erreurs par défaut?

Répondre

4

J'ai été dérangé par ce même problème pendant un certain temps et j'ai finalement trouvé l'incantation magique pour ramener la gestion des erreurs par défaut. Il s'avère que cela n'a rien à voir avec Passenger, mais est plutôt causé par l'utilisation de Sinatra :: Base au lieu d'une application classique (de haut niveau). Si vous sous-classez Sinatra :: Base, la plupart des options ont des valeurs par défaut différentes. Dans ce cas, l'option que vous devez changer est:

set :show_exceptions, true if development? 

Si vous souhaitez également réactiver le (lié) la capacité d'utiliser un gestionnaire d'erreurs dans l'application, utilisez:

set :raise_errors, false 

Ce qui permet au bloc error do ... end de fonctionner comme dans une application classique.

Des informations supplémentaires sur les différences entre les applications classiques et Sinatra :: Base peuvent être trouvées dans this lighthouse ticket et il y a some discussion of this specific difference in the google group.

+0

Cela ne fonctionne pas pour moi. Je ne suis toujours pas capable d'attraper l'erreur – ishan

+0

Peut-être un peu plus pragmatique: 'set: show_exceptions, développement?' – briangonzalez

-3

Regardez dans le journal des erreurs de votre serveur Web.

1

Vous pouvez utiliser rack :: ShowExceptions pour afficher la trace de la pile

configure do 
    enable :dump_errors,:raise_errors 
    use Rack::ShowExceptions 
end 

et utiliser le gestionnaire d'erreurs Sinatra pour afficher

$exception = Sinatra::ShowExceptions.new(self) 
error do 
    @error = env['sinatra_error'] 
    html_body = $exception.pretty(env,@error) 
end 
Questions connexes