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/middleware/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。

1 个赞

在针对 PostgreSQL 14 运行时,我们的搜索功能完全失效,因此我们仍为所有遵循我们标准安装的用户提供 PostgreSQL 13。\n\n我们最终会修复它,因为我们总有一天会升级到 PostgreSQL 15(或 16),但这可能需要一些时间。

3 个赞

谢谢。我们正在调查这可能是什么原因造成的,如果我们之前有其他 PostgreSQL 版本的话。一旦我们确定了问题,会尽快回复您。

1 个赞

您之前是否有 14 并不重要,Discourse 不兼容 PostgreSQL 14。这就是您的问题。

1 个赞

我已经查看了 discourse/docs/INSTALL.md at main · discourse/discourse · GitHub 文档,因为云文档根本没有服务器要求。

我们在此处看到"Postgres 13+"的要求。我是否可以建议贵团队添加一个通知,说明 Discourse 仅支持 13.X 版本?也许,在像我们这样的情况下,明确通知不支持 14/15/… 版本也会有帮助。

您看,我们至少从 12 月份开始就有了 14 版本,并且在此之前的几个月里一直安装了 Discourse 的稳定版本。最近,我们回退到 tests-passed 版本,搜索按预期工作。今天,我们从 2.9.0.beta14 更新到 3.1.0.beta1,现在它坏了。

您是否有可能使用私信回复插件?

4 个赞

我们已安装,但在管理员设置中已禁用

我们也尝试在安全模式下复现了该问题。这重要吗?

不清楚,但在我的情况下(症状相同,尽管使用的是 PostgreSQL13)就是这个问题。
我相信 Richard 会很快修复它,在此期间,可以分叉并进行简单编辑来解决。

2 个赞

哦。真糟糕。我有一个网站,不久前我不小心将其升级到了 PG14,并认为它会没事的。

我只做了一些搜索,它们并没有明显地变得糟糕。而且该网站主要是中文的,所以我其实也无法分辨。

它到底有多糟糕,修复它需要多大的努力?

2 个赞

安全模式仅影响客户端。此错误发生在服务器端。要检查该错误是否与私信插件有关,您需要完全卸载该插件。

此错误似乎与 Ruby 3.1 插件不兼容有关。

4 个赞

那么,我相当确定是插件中的 execute(readonly_mode)(但不知道为什么 :sweat_smile:

3 个赞

您说得对,@Benjamin_D

那个插件确实会破坏搜索并触发500错误。

但是运行PostgreSQL 14+也会破坏搜索,但方式更隐蔽,很多在pg13上能返回的结果在pg14+上将无法返回。

所以@kinetiksoft可以移除插件并重建以使搜索不报错,但由于pg版本的原因,搜索仍然无法正常工作。

4 个赞

我现已确认搜索按预期工作,因为我们已移除 Discourse Private Replies 插件

服务器端未进行任何更改,PostgreSQL 仍为 14.6-1,但我们将在下周研究降级选项。

感谢大家,你们为我们挽救了本周末的搜索功能。

附注:恳请 Discourse @ github 团队在官方文档中为 PostgreSQL 版本添加注意事项:

3 个赞

您是否查看了关于运行外部 PostgreSQL 的文档?它在这里 Meta 上,而不是 github 上。所有文档都可以在 Documentation - Discourse Meta 上找到

1 个赞

抱歉各位!私信插件确实导致了搜索出错(或者说:Ruby 3.1 导致插件出错)。
现在它又能正常工作了。

5 个赞