#ruby-on-rails #ruby
#ruby-on-rails #ruby
Вопрос:
Я думаю, что Rails 3.1 меняет способ возникновения ошибок. Кто-нибудь может помочь или подтвердить это? Я пытаюсь создать пользовательские страницы ошибок с Rails 3.1.0.rc1
unless config.consider_all_requests_local
rescue_from Exception, :with => :render_error
rescue_from ActiveRecord::RecordNotFound, :with => :render_not_found
rescue_from ActionController::RoutingError, :with => :render_not_found
rescue_from ActionController::UnknownController, :with => :render_not_found
rescue_from ActionController::UnknownAction, :with => :render_not_found
end
^^ Это не работает.
config.consider_all_requests_local = true
Это в моей среде разработки по умолчанию. Я предполагаю, что Rails 3.1 удаляет «action_controller», но я нигде не могу это подтвердить.
Спасибо!
Комментарии:
1. Какого рода ошибки? Просто исключения в целом?
2. Было бы полезно, если бы вы могли опубликовать некоторый код и объяснить, что конкретно , какое неожиданное поведение вы видите.
Ответ №1:
Я предполагаю, что следующий код отображается в вашем ApplicationController?
unless config.consider_all_requests_local
rescue_from Exception, :with => :render_error
rescue_from ActiveRecord::RecordNotFound, :with => :render_not_found
rescue_from ActionController::RoutingError, :with => :render_not_found
rescue_from ActionController::UnknownController, :with => :render_not_found
rescue_from ActionController::UnknownAction, :with => :render_not_found
end
Если это так, попробуйте заменить эту строку:
unless config.consider_all_requests_local
с этой строкой (я думаю, до Rails 3):
unless ActionController::Base.consider_all_requests_local
или это (после Rails 3):
unless Rails.application.config.consider_all_requests_local
Ответ №2:
Я не верю, что решение Мэтта отловит ошибки маршрутизации в Rails 3.0 / 3.1.
Попробуйте поместить в свое приложение следующее.rb:
# 404 catch all route
config.after_initialize do |app|
app.routes.append{ match '*a', :to => 'application#render_not_found' } unless config.consider_all_requests_local
end
Смотрите: https://github.com/rails/rails/issues/671#issuecomment-1780159
У меня хорошо сработало!
Комментарии:
1. Спасибо за добавление этого! Узнал об этом через несколько недель после публикации моего первоначального ответа здесь . 🙂
2. в общем, вещи, которые в конечном итоге эквивалентны if ! Rails.env.production опасны…
3. @Kevin — Где это происходит? Связано ли это с использованием
consider_all_request_local
? Если это так, я не думаю, что вы приводите допустимый аргумент, поскольку это параметр, определенный для каждой среды. Для каждой среды настроено множество параметров, и это лишь один из многих.4. Прошло некоторое время, но я согласен и отзываю свою жалобу 🙂