Как переопределить Rails 3.1 «Ошибка маршрутизации» при использовании движков с глобальными маршрутами? - PullRequest
3 голосов
/ 01 августа 2011

Я конвертирую старое приложение в Rails 3.1. Новое приложение использует движок, который обеспечивает глобальный маршрут:

# myengine/config/routes.rb
Rails.application.routes.draw do
  match 'foo/bar/*path' => 'myengine/foobar#index', :format => false
end

Устаревшее приложение использовало окончательный универсальный маршрут для обеспечения настраиваемой обработки (а не знакомую страницу Rails «Ошибка маршрутизации») для несопоставимых в других отношениях маршрутов:

# myapp/config/routes.rb
Myapp::application.routes.draw do
  # ...
  match '*path' => 'failures#index', :format => false
end

Каким-то образом этот промежуточный маршрут мешает маршруту двигателя. Если я закомментирую маршрут приложения, маршрут двигателя работает нормально. Но если я оставлю его в движке, маршрут никогда не будет совпадать, и вместо него будет использован универсальный маршрут приложения к failures#index:

Started GET "/foo/bar//projects/x/vol1/prod22/9907042031/9907042031.aff/ImageProperties.xml" for 10.71.1.136 at 2011-08-02 15:46:48 -0700
  Processing by FailuresController#index as JS
  Parameters: {"path"=>"foo/bar/projects/x/vol1/prod22/9907042031/9907042031.aff/ImageProperties.xml"}
Rendered failures/index.html.erb within layouts/application (0.0ms)
Completed 200 OK in 47ms (Views: 46.9ms)

Как можно переопределить обработчик ошибок маршрутизации Rails 3.1 по умолчанию, не нарушая маршрутов ядра?

1 Ответ

2 голосов
/ 03 августа 2011

Правильный способ обработки этого был rescue_from и пользовательским обработчиком ошибок, а не с обходным маршрутом с враждебным движком.Однако пользовательские обработчики ошибок больше не поддерживаются в Rails 3.1 , и это, вероятно, не будет исправлено до Rails 3.2, если вообще когда-либо.Если вам нужна настраиваемая обработка ошибок и вы используете движки с маршрутами, гем vidibus-routing_error предоставляет обходной путь.

Другой вариант - поместить собственный обработчик ошибок в конечную точку Rack внизу.вашего стека.

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