2012-03-09 3 views
4

Я бы хотел отправить электронное письмо при наличии исключения в моем приложении и отобразить обычную 500-страничную страницу. Я не мог найти, как выполнить 500 страницы визуализация:Как сделать 500 страниц в rescue_from

class ApplicationController < ActionController::Base 
    rescue_from StandardError do 
    send_email_of_error 
    # what goes here? 
    end 

    ... 
end 

ответ

10

Поднятие исключения еще раз, скорее всего, к тому, что вы хотите:

rescue_from StandardError do |exception| 
    send_email_of_error 
    raise exception 
end 

Вы также можете позвонить render, чтобы сделать свою собственную страницу, the docs есть пример этого.

Но зачем изобретать колесо? exception notifier gem уже делает это и настраивается и тестируется.

+0

это здорово. Я обнаружил, что оригинал не обновлялся в течение двух лет. Я попробую эту версию. – mbdev

+0

К сожалению, это получается, чтобы отобразить страницу с ошибкой, но с кодом состояния 200. –

2

Это подход, который, возможно, соответствует вашим потребностям:

class ApplicationController < ActionController::Base 
    rescue_from Exception, :with => :render_500 

    def render_500(exception) 
    @exception = exception 
    render :template => "shared/500.html", :status => 500 
    end 
end 
+6

Никогда не следует спасать от Исключения. Вместо этого используйте StandardError, как в ответе Эндрю Маршалла. – dmur

+0

@dmur было бы полезно для других, если вы объясните свой комментарий. И вопрос в том, как сделать 500 страниц. Ответ на этот вопрос не затрагивается в ответе Эндрю Маршалса. Wether вы спасаете от Exception или от StandardError - что бы я никогда не делал, потому что вы ничего не знаете об ошибке, поэтому пусть это сбой и исправить - здесь не важно. В моем ответе я должен был написать «AnyException» – awenkhh

+2

Вы правы, вот объяснение: http://stackoverflow.com/questions/10048173/why-is-it-bad-style-to-rescue-exception-e- в-рубин – dmur

Смежные вопросы