Обработка ошибок HTTP - PullRequest
5 голосов
/ 14 января 2010

Это мой первый пост здесь, поэтому я надеюсь, что отправлю этот вопрос в нужное место. В противном случае, пожалуйста, дайте мне знать, чтобы я знал в следующий раз, когда я публикую здесь:)

Я работаю на веб-сайте RoR и хотел бы обрабатывать ошибки сервера (400, 404, 500 и т. Д.) Индивидуально. Кроме того, поскольку веб-сайт является динамическим, я хотел бы обрабатывать ошибки в среде rails, а не на уровне сервера. Примером того, что я хотел бы сделать, может быть предоставление пользователю дополнительного материала или панели поиска, когда он сталкивается со страницей или шаблоном, который не загружается или просто не существует.

Итак, я немного почитал, и я думаю, что использование обработчика исключений rescue_from - лучший способ в моем случае. (Был бы более чем рад услышать, если у кого-то из вас другое мнение).

У меня есть простой рабочий прототип (см. Код ниже), но я получаю ошибку, когда добавляю в код следующий обработчик исключений:

rescue_from ActionController::MissingTemplate,          :with => :not_found #404

Теперь я не вижу, что у меня есть орфографическая ошибка, и я видел эту строку в коде, размещенном в Интернете. Однако, когда я включаю его, я получаю следующую ошибку маршрутизации:

Routing Error No route matches "/errorhandle" with {:method=>:get}

Я работаю над рельсами 2.3.5, возможно, это как-то связано с этим?

Я надеюсь, что вы поможете мне пролить свет на эту проблему.

Ура! / Maja

class ApplicationController < ActionController::Base

    helper :all # include all helpers, all the time

    protect_from_forgery #See ActionController::RequestForgeryProtection for details

    #ActiveRecord exceptions
    rescue_from ActiveRecord::RecordNotFound, :with => :not_found #400   

    #ActiveResource exceptions  
    rescue_from ActiveResource::ResourceNotFound, :with => :not_found #404

    #ActionView exceptions
    rescue_from ActionView::TemplateError, :with => :not_found #500

    #ActionController exceptions
    rescue_from ActionController::RoutingError, :with => :not_found #404   

    rescue_from ActionController::UnknownController, :with => :not_found #404 

    rescue_from ActionController::MethodNotAllowed, :with => :not_found #405   

    rescue_from ActionController::InvalidAuthenticityToken, :with => :not_found #405

    rescue_from ActionController::UnknownAction, :with => :not_found #501

    # This particular exception causes all the rest to fail.... why?
    # rescue_from ActionController::MissingTemplate, :with => :not_found #404

    protected
    def not_found
        render :text => "Error", :status => 404
    end

    # Scrub sensitive parameters from your log
    # filter_parameter_logging :password 
end

1 Ответ

2 голосов
/ 14 января 2010

Быстро взглянем на это: http://www.ruby -forum.com / тема / 47898

http://henrik.nyh.se/2008/09/404-invalid-rails-format

В частности, пост в первой ссылке:

Нельзя использовать обычное ключевое слово «спасение» для спасения MissingTemplate. исключение.

Вместо этого используйте rescue_action, например:

def rescue_action(exception)
  if ::ActionController::MissingTemplate === exception
     render :text => 'rescued'
  else
     super
  end
end

Кент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...