Повышение маршрута не найдена ошибка - PullRequest
4 голосов
/ 17 февраля 2011

В настоящее время я пишу книгу о Rails 3, а предыдущий-я написал в главе 3 или около того, что при запуске определенной функции генерируется ошибка маршрутизации.Сейчас я не могу писать вещи, которые не соответствуют действительности, поэтому я почти уверен, что это случилось однажды в прошлом.

Я еще не смог продублировать сценарий сам, но я 'Я совершенно уверен, что это один из забытых параметров в файле среды.

Для дублирования этой проблемы:

  • Создание нового проекта rails
  • важно : Удалите файл public/index.html
  • Добавьте огуречные рельсы и капибару в группу "test" в вашем Gemfile
  • run bundle install
  • run rails g cucumber:skeleton
  • Создайте новую функцию, назовите ее features/creating_projects.feature
  • Внутри этой функции поместите:

Это:

Feature: Creating projects
  In order to value
  As a role
  I want feature

Scenario: title
  Given I am on the homepage

Когдавы запускаете эту функцию, используя bundle exec cucumber features/creating_projects.feature, она должна завершиться с ошибкой «Нет совпадений с маршрутом /», поскольку вы не определили корневой маршрут.Однако то, что я и другие наблюдаем, это то, что не .

Теперь я установил параметр в test.rb, чтобы эта страница исключений отображалась, но я бы хотелскорее Rails сделал хард-рейз исключения, чтобы он появился в Cucumber как неудачный шаг, как я уверен, раньше, а не мимоходом.

Кто-нибудь знает, что могло бы бытьизменился с мая прошлого года для Rails, чтобы не делать этого?Я вполне уверен, что некоторые устанавливаются в config/environments/test.rb, но я не могу понять это для жизни.

1 Ответ

3 голосов
/ 17 февраля 2011

После изучения исходного кода Rails кажется, что промежуточное программное обеспечение ActionDispatch::ShowExceptions, ответственное за возникновение исключения ActionController::RoutingError, отсутствует в тестовой среде. Подтверждено выполнением rake middleware и rake middleware RAILS_ENV=test.

Вы можете видеть, что в https://github.com/josh/rack-mount/blob/master/lib/rack/mount/route_set.rb#L152 он возвращает заголовок X-Cascade => 'pass', и ActionDispatch::ShowExceptions несет ответственность за его получение (в https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/middleware/show_exceptions.rb#L52)

Итак, причина, по которой вы видите, что ваш тестовый пример проходит, потому что rack-mount возвращает текст "Not Found" со статусом 404.


Я буду обвинять людей и исправлю это для вас. Вот это условие: https://github.com/rails/rails/blob/master/railties/lib/rails/application.rb#L159. Если значение равно true, ошибка была переведена правильно, но мы получили вывод страницы ошибки. Если это неверно, то это промежуточное ПО не загружается вообще. Держись ...


Обновление : Чтобы очистить предыдущий блок, вы попали в тупик здесь. Если вы установите action_dispatch.show_exceptions в false, вы не загрузите это промежуточное ПО, что привело к ошибке 404 из rack-mount. Принимая во внимание, что если вы устанавливаете action_dispatch.show_exceptions в true, это промежуточное программное обеспечение будет загружено, но оно спасет ошибку и предоставит вам хорошую страницу «исключений».

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