URI :: InvalidURIError (URI должен быть только ascii) - PullRequest
0 голосов
/ 03 мая 2018

У меня есть старое приложение rails 3.2, когда я пытаюсь пройти по маршруту с не-ascii char, например; example.com/city/bergstraße тогда я получаю следующую ошибку:

/Users/user/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/uri/rfc3986_parser.rb:20:in `split'
/Users/user/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/uri/rfc3986_parser.rb:72:in `parse'
/Users/user/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/uri/common.rb:226:in `parse'
actionpack (3.1.0) lib/action_dispatch/routing/redirection.rb:91:in `block in redirection_proc'
rack-mount (0.8.3) lib/rack/mount/route_set.rb:152:in `call'
rack-mount (0.8.3) lib/rack/mount/route_set.rb:152:in `block in call'
...

Проблема в том, что я получаю эту ошибку перед тем, как нажимать на любой контроллер , поэтому мне просто интересно, где я могу перехватить эту ошибку, чтобы проанализировать и исправить URL? Благодарю.

P.S: пожалуйста, посмотрите на трассировку стека, прежде чем указывать мне на любой предыдущий пост.

1 Ответ

0 голосов
/ 03 мая 2018

Согласно RFC 3986 URI может содержать только подмножество символов ASCII.

Чтобы предоставить действительный URI, не-ASCII-символы должны быть экранированы:

irb(main):008:0> URI.parse "example.com/city/#{URI.encode('bergstraße')}"
=> #<URI::Generic example.com/city/bergstra%C3%9Fe>

Проблема в том, что я получаю эту ошибку перед тем, как попасть в любой контроллер, так что мне просто интересно, где я могу поймать эту ошибку, чтобы разобрать и исправить URL

Проблема в том, что вы не должны ловить эту ошибку. Ваш сервер rails не должен отвечать за неправильные или некорректные запросы.

Хотя вы можете попытаться написать часть промежуточного программного обеспечения для решения этой проблемы, вы должны вместо этого выяснить, почему клиенты отправляют запросы на недопустимый URI.

Если они происходят из вашего собственного приложения, убедитесь, что вы правильно избегаете столбцов слагов, а не просто создаете URL с интерполяцией строк. stringex gem или friendly_id ваши друзья здесь.

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