Поиск перестал работать после обновления 3.1.0.beta1

После нашего обновления 3.1.0, выпущенного сегодня, поиск перестал работать.
Наша команда системных администраторов выявила проблему и предоставила нам лог, указывающий на ошибку приложения.

Сталкивается ли кто-то ещё с этой проблемой? Какие могут быть подсказки, чтобы мы могли решить её самостоятельно? Я вижу, что поиск на Discourse Meta работает идеально.

Started GET "/search?q=37%20%20realm&page=1" for [IP_REDACTED] at 2023-01-13 11:19:36 +0000
Processing by SearchController#show as JSON
  Parameters: {"q"=>"37  realm", "page"=>"1"}
Completed 500 Internal Server Error in 4ms (ActiveRecord: 0.0ms | Allocations: 1555)
ArgumentError (wrong number of arguments (given 1, expected 0))
lib/search.rb:285:in `execute'
app/controllers/search_controller.rb:73:in `show'
app/controllers/application_controller.rb:414:in `block in with_resolved_locale'
app/controllers/application_controller.rb:414:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:74:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:366:in `call'
config/initializers/008-rack-cors.rb:24:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
lib/middleware/request_tracker.rb:228:in `call'
Failed to handle exception in exception app middleware : ArgumentError : wrong number of arguments (given 1, expected 0)
Скриншоты проблемы



Это не может быть полностью общей проблемой — у меня всё работает отлично. У меня тоже (полагаю, Meta на последней версии).

Что происходит при попытке ввести /safe-mode?

К сожалению, это не работает даже в безопасном режиме. Режим без тем и плагинов.

Мы видим, что поиск не работает для тем/сообщений, но работает для категорий/тегов и пользователей.

Используете ли вы внешний экземпляр PostgreSQL? Если да, то какая версия?

Да, мы используем внешний PostgreSQL. Версия: 14.6-1

Поиск полностью неработоспособен при использовании PostgreSQL 14, поэтому мы по-прежнему поставляем PostgreSQL 13 для всех, кто следует нашей стандартной процедуре установки.

Мы в конечном итоге исправим эту проблему, так как однажды обновимся до PostgreSQL 15 (или 16), но это может занять некоторое время.

Спасибо. Мы расследуем, как это могло произойти, если у нас ранее была другая версия PostgreSQL. Мы свяжемся с вами, как только выявим проблему.

Не имеет значения, была ли у вас ранее версия 14. Discourse не совместим с PostgreSQL 14. Это и есть ваша проблема.

Я вместо этого проверил документацию по адресу discourse/docs/INSTALL.md at main · discourse/discourse · GitHub, так как в документации по Cloud вообще нет требований к серверу.

Здесь указано требование «Postgres 13+». Не ошибусь ли я, предложив вашей команде добавить уведомление о том, что Discourse поддерживает только версии 13.X? Возможно, было бы полезно также явно указать, что версии 14/15/… не поддерживаются, особенно в таких случаях, как наш.

Дело в том, что у нас уже как минимум с декабря была версия 14, а стабильная версия Discourse была установлена ещё несколько месяцев назад. Недавно мы вернулись к версии tests-passed, и поиск работал как ожидалось. Сегодня мы обновились с 2.9.0.beta14 до 3.1.0.beta1, и теперь всё сломалось.

Есть ли шанс, что вы используете плагин Private Replies?

Мы установили его, но он отключен в настройках администратора.

Мы также попробовали воспроизвести проблему в безопасном режиме. Разве это имеет значение?

Неясно, но в моем случае это была именно эта проблема (те же симптомы, хотя использовался PostgreSQL 13). Я уверен, что Ричард скоро это исправит. В качестве временного решения можно сделать форк и внести простое изменение.

Ох, как досадно. У меня есть один сайт, который я случайно обновил до PG14 довольно давно, и думал, что всё будет в порядке.

Я только что выполнил несколько поисков, и они не казались явно сильно сломанными. Кроме того, сайт в основном на китайском языке, так что я всё равно не смог бы точно определить проблему.

Насколько всё серьёзно сломано и насколько сложно будет это исправить?

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

Эта ошибка, похоже, связана с несовместимостью плагина с Ruby 3.1

Тогда я довольно уверен, что проблема в execute(readonly_mode) внутри плагина (и понятия не имею почему :sweat_smile: )

Вы правы, @Benjamin_D.

Этот плагин нарушает работу поиска и вызывает ошибку 500.

Однако использование PostgreSQL 14 и выше также сломает поиск, но более незаметно: многие результаты, которые возвращались в pg13, не будут возвращаться в pg14+.

Таким образом, @kinetiksoft может удалить плагин и пересобрать систему, чтобы поиск перестал выдавать ошибки, но он всё равно не будет работать нормально из-за версии PostgreSQL.

Теперь я могу подтвердить, что поиск работает как ожидалось, поскольку мы удалили плагин Discourse Private Replies.

Стороны сервера изменений не вносилось, PostgreSQL по-прежнему версии 14.6-1, но на следующей неделе мы рассмотрим варианты отката версии.

Спасибо всем, вы спасли функциональность поиска на эти выходные.

P.S. Просим команду Discourse @ GitHub добавить предупреждение о версии PostgreSQL в официальную документацию:

Вы проверяли документацию по запуску внешнего PostgreSQL? Она находится здесь, на Meta, а не на GitHub. Вся документация доступна по адресу Documentation - Discourse Meta

Извините, друзья! Плагин для приватных ответов действительно ломал поиск (или: Ruby 3.1 ломал плагин).
Теперь всё работает снова.