Rails 3 - настройка ошибки и 404 страницы
Я создаю приложение Rails 3 на Heroku. Сейчас мои страницы ошибок и страница 404 являются стандартными страницами рельсов/героев.
Я бы хотел настроить эти два. У вас есть страница с ошибкой и у вас есть страница для 404.
Все обучающие программы, найденные в google, являются годами и не работают с Rails 3.
Можете ли вы предложить хороший современный учебник или советы о том, как это сделать?
Спасибо
Ответы
Ответ 1
Если вы хотите зафиксировать определенные ошибки, используйте rescue_from
в ApplicationController
.
В противном случае, если вы просто хотите редактировать страницы ошибок по умолчанию, отредактируйте файлы 500.html и 400.html в {Rails.root}/public
Ответ 2
Я нашел этот урок весьма полезным:
http://ramblinglabs.com/blog/2012/01/rails-3-1-adding-custom-404-and-500-error-pages
Ответ 3
Обновление 2013 года для Rails 3.2 из Jose Valim
Когда Rails 3.0 вышел, одна из функций, которые люди внезапно пропустили, - это способность лучше обрабатывать исключения. Проблема заключалась в том, что, поскольку Rails 3 стал намного более "стойким", нам пришлось переместить некоторые функции в стек промежуточного программного обеспечения, и это заставило нас также перемещать всю обработку исключений. Rails 3.2 пытается вернуть некоторую настройку обратно в игру, разрешив вам установить собственное приложение стойки исключений, которое вызывается, когда происходит сбой. Например, вы можете установить приложение исключений на свой собственный маршрутизатор в свой config/application.rb:
config.exceptions_app = self.routes
Теперь, каждый раз, когда возникает исключение, ваш маршрутизатор будет вызван. Поэтому, чтобы отображать пользовательские 404 страницы, вы можете просто добавить к своему маршрутизатору:
match "/404", :to => "errors#not_found"
И реализуйте логику в контроллере, как хотите! Тем не менее, есть несколько вещей, которые следует иметь в виду, если вы идете по этой дороге:
- Вам нужно использовать совпадение на ваших маршрутах, а не получать/отправлять/поместить/удалить
потому что такие исключения могут возникать в любом HTTP-запросе;
- Вы не сможете увидеть свои собственные исключения в разработке
если вы не установите для параметра config.consider_all_requests_local значение false в вашем
конфигурации/среда/development.rb. Причина в том, что если запрос
считается локальным, Rails всегда будет поддерживать показ отладки
страница исключений; [или запустите
rails server -e production
]
- Вы всегда можете получить доступ к исходному исключению в контроллере
ENV [ "action_dispatch.exception" ];
- Невозможно установить файлы cookie, сеанс и
исключение происходит. Все они были уже сериализованы
клиент;
- Наконец, приложение исключений по умолчанию, используемое Rails, которое
просто делает страницу публичной /STATUS.html доступна здесь:
action_dispatch/промежуточный/public_exceptions.rb
Помните, что все, что вы делаете в контроллере ошибок, не должно быть "фантазией". Держите его просто, потому что что-то уже пошло не так с вашим приложением!
Ответ 4
Well rails3 все еще использует те же 404.html, 422.html и 500.html в общей папке. Вы можете настроить их.
Если вы говорите о том, чтобы поймать эти исключения и сделать некоторые динамические вещи, я думаю, что базовая функциональность одна и та же, пусть некоторые around_filter
поймают ваше особое исключение в application_controller
т.е. ActiveRecord::RecordNotFound
и сделают что-то с этим.