Поиск возвращает «500 Internal Server Error» для определенных поисковых фраз

Привет,

Мы наблюдаем периодические проблемы при использовании функции поиска на Discourse.

Наблюдения

В последние недели мы фиксировали спорадические ответы «500 Internal Server Error» при поиске на https://community.hiveeyes.org/. Хотя это может показаться забавным, мы считаем, что проблема действительно зависит от поискового запроса.

Проблема возникает только при использовании моментального поиска рядом с меню-гамбургером. Если перейти на страницу поиска /search и выполнить поиск оттуда, всё работает нормально.

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

Убедитесь сами

Нам повезло: мы смогли воспроизвести проблему на Meta. При поиске фразы «search returns 500» ошибка воспроизводится детерминированно. Это также происходит, даже если вы не вошли в систему.

Ответ сервера:

Виновник — поисковый запрос, серьёзно?

Так и кажется. Поиск фразы «search croaks 500» аналогичным образом не вызывает этой проблемы.

Итог

Мы находим эту ситуацию одновременно странной и забавной, поэтому решили поделиться своими наблюдениями с вами. Хотя мы не испытываем серьёзных неудобств, полагаю, вам будет интересно разобраться в этом, если у вас есть время.

Спасибо за внимание и с наилучшими пожеланиями,
Андреас.

P.S.: Вызов этой ошибки при поиске самой проблемы на Meta делает ситуацию ещё более забавной, ведь, я уверен, мы все всё ещё любим рекурсии.

3 лайка

Хм, да. Вот ошибка, которую мы видим в логах:

URI::InvalidURIError (bad URI(is not URI?): "http:error]")
/usr/local/lib/ruby/2.6.0/uri/rfc3986_parser.rb:67:in `split'

/usr/local/lib/ruby/2.6.0/uri/rfc3986_parser.rb:67:in `split'
/usr/local/lib/ruby/2.6.0/uri/rfc3986_parser.rb:73:in `parse'
/usr/local/lib/ruby/2.6.0/uri/common.rb:234:in `parse'
/usr/local/lib/ruby/2.6.0/uri/common.rb:737:in `URI'
/var/www/discourse/lib/search/grouped_search_results.rb:83:in `block in blurb_for'
/usr/local/lib/ruby/2.6.0/set.rb:338:in `each_key'
/usr/local/lib/ruby/2.6.0/set.rb:338:in `each'
/var/www/discourse/lib/search/grouped_search_results.rb:82:in `blurb_for'
/var/www/discourse/lib/search/grouped_search_results.rb:60:in `blurb'
/var/www/discourse/app/serializers/search_post_serializer.rb:9:in `blurb'

Спасибо за отчёт, @amotl.

5 лайков

Спасибо @amotl и @david, это теперь исправлено здесь на meta по адресу FIX: skip invalid URLs when checking for audio/video in search blurbs · discourse/discourse@0dfc594 · GitHub

6 лайков

Уважаемые @david и @pmusaraj,

спасибо за оперативную работу по этому вопросу: от подтверждения до самого исправления. Мы с нетерпением ждём получения этого исправления. Возможно, оно будет включено в версию 2.4.0.beta7?

С уважением,
Андреас.

2 лайка

Да, это будет включено в следующую бета-версию.

6 лайков

Эта тема была автоматически закрыта через 5 дней. Новые ответы больше не принимаются.