自今天 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)
问题的截图
Jagster
(Jakke Lehtonen)
2
这不可能是个普遍问题——我的工作正常。我也是(我猜 Meta 是最新的)。
尝试 /safe-mode 时会发生什么?
遗憾的是,在安全模式下也无法正常工作。没有主题,没有插件模式。
我们发现搜索在“主题/帖子”上无效,但在“类别/标签”和“用户”上有效。
Falco
(Falco)
5
您是否正在使用外部 PostgreSQL 实例?如果是,请问是什么版本?
是的,我们正在使用外部 PostgreSQL。版本是 14.6-1。
1 个赞
Falco
(Falco)
7
在针对 PostgreSQL 14 运行时,我们的搜索功能完全失效,因此我们仍为所有遵循我们标准安装的用户提供 PostgreSQL 13。\n\n我们最终会修复它,因为我们总有一天会升级到 PostgreSQL 15(或 16),但这可能需要一些时间。
3 个赞
谢谢。我们正在调查这可能是什么原因造成的,如果我们之前有其他 PostgreSQL 版本的话。一旦我们确定了问题,会尽快回复您。
1 个赞
Stephen
(Stephen)
9
您之前是否有 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,现在它坏了。
Benjamin_D
(Benjamin Decotte)
13
不清楚,但在我的情况下(症状相同,尽管使用的是 PostgreSQL13)就是这个问题。
我相信 Richard 会很快修复它,在此期间,可以分叉并进行简单编辑来解决。
2 个赞
pfaffman
(Jay Pfaffman)
14
哦。真糟糕。我有一个网站,不久前我不小心将其升级到了 PG14,并认为它会没事的。
我只做了一些搜索,它们并没有明显地变得糟糕。而且该网站主要是中文的,所以我其实也无法分辨。
它到底有多糟糕,修复它需要多大的努力?
2 个赞
david
(David Taylor)
15
安全模式仅影响客户端。此错误发生在服务器端。要检查该错误是否与私信插件有关,您需要完全卸载该插件。
此错误似乎与 Ruby 3.1 插件不兼容有关。
4 个赞
Benjamin_D
(Benjamin Decotte)
16
那么,我相当确定是插件中的 execute(readonly_mode)(但不知道为什么
)
3 个赞
Falco
(Falco)
17
您说得对,@Benjamin_D。
那个插件确实会破坏搜索并触发500错误。
但是运行PostgreSQL 14+也会破坏搜索,但方式更隐蔽,很多在pg13上能返回的结果在pg14+上将无法返回。
所以@kinetiksoft可以移除插件并重建以使搜索不报错,但由于pg版本的原因,搜索仍然无法正常工作。
4 个赞
我现已确认搜索按预期工作,因为我们已移除 Discourse Private Replies 插件。
服务器端未进行任何更改,PostgreSQL 仍为 14.6-1,但我们将在下周研究降级选项。
感谢大家,你们为我们挽救了本周末的搜索功能。
附注:恳请 Discourse @ github 团队在官方文档中为 PostgreSQL 版本添加注意事项:
3 个赞
Stephen
(Stephen)
19
您是否查看了关于运行外部 PostgreSQL 的文档?它在这里 Meta 上,而不是 github 上。所有文档都可以在 Documentation - Discourse Meta 上找到
1 个赞
RGJ
(Richard - Communiteq)
20
抱歉各位!私信插件确实导致了搜索出错(或者说:Ruby 3.1 导致插件出错)。
现在它又能正常工作了。
5 个赞