重命名大型(按主题计数)类别时出现 502 错误

你好。
我也在以下地址发布了相关内容:Moving posts returns 502 bad gateway - #63 by Canapin
但看起来该错误也出现在其他上下文中。我无法重命名分类:

JS 控制台:

在安全模式下也会出现同样的问题(我除了 data-explorer 外没有安装任何自定义主题或插件),版本为 2.6.0.beta2。
我的服务器运行在 Ubuntu 18 上,配置为 4 个 vCPU、8 GB 内存和 160 GB 磁盘空间。

3 个赞

错误出现需要很长时间吗?我认为你遇到了超时问题,可能是因为查询过于繁重。

1 个赞

20-30 秒?另外,重命名其他类别时并未出现此问题。:thinking:

编辑:在我的开发论坛上也出现了此问题(一台配置较强的电脑,运行 Ubuntu 子系统)。

再次编辑:

  1. 分批处理似乎有效。看来 Discourse 不喜欢移动超过 3000 个主题,即使服务器性能更强(我已升级到 16 vCPU / 32 GB)。所以我想这个问题与我重命名类别的问题不同。我仍然无法重命名该类别。

  2. 我创建了一个新类别 B(我可以随意重命名),将类别 A(我无法重命名)中的所有主题移动到类别 B:之后我无法再重命名类别 B,但可以重命名类别 A。
    我尝试重命名我的类别,每次都选择一个帖子更多的类别。内容更多(帖子更多、主题更大)的类别似乎需要更长时间才能完成重命名。

有两个类别我无法重命名(确实耗时过长……):

我可以重命名“公开个人资料消息”,其中只包含没有回复的主题。

30 秒是 nginx 的超时时间,所以这说得通。它只是需要比这更长的时间。
如果我是你,我会从 Rails 控制台尝试一下。

我本来想这么做,但不确定是否安全:我在想,为什么在 Discourse 中仅仅重命名一个分类标题会花费这么长时间 :thinking:
它是否需要检查一些我未曾考虑到的内容?

看来是这样 :slight_smile:
我想它可能正在重新计算某些统计数据。你可以连接到 Postgres 并运行类似以下的命令:

SELECT pid, age(query_start, clock_timestamp()), usename, query 
FROM pg_stat_activity 
WHERE query != '<IDLE>' AND query NOT ILIKE '%pg_stat_activity%' 
ORDER BY query_start desc;

以查看究竟是什么导致了如此长的耗时。

谢谢!
不过我不熟悉这个。我应该在 Discourse 尝试更改类别名称时运行这个查询吗?

是的,它会显示当前正在运行的查询,所以你可以在等待时运行它。你有 30 秒的时间 :wink:

2 个赞

我在尝试更改类别名称约 10 秒后运行了该查询,返回结果如下:

我没看出有什么异常?:thinking:

我看到一个非常简单的查询(UPDATE categories...),看起来已经耗时13秒了……
如果你手动运行它,会发生什么?

编辑:如果这是一个导入的论坛,备份后再恢复可能会有所帮助。

由于我在家庭电脑的本地开发环境中也遇到了同样的问题,我尝试在开发论坛上操作。

我试图通过 Discourse 界面更改分类名称。我在首帖中展示的错误出现了,并且我的内存被占满:
image

您的查询显示:

我尝试通过 Rails 控制台进行更新,
尝试了以下两条命令:

ActiveRecord::Base.connection.execute("UPDATE categories SET name = 'General Discussion', topic_template = '', sort_order = '', default_view = '', read_only_banner = '', name_lower = 'general_discussion', updated_at = '2020-09-16 13:36:50.014192' WHERE categories.id = 21")
Category.where(id: 21).update(name: "General")

两者都运行得非常顺利。

这……有点意思…… :thinking:

更新:我尝试在我的另一个在线论坛(不同的数据/服务器/操作系统等,但 Discourse 版本相同)上重命名一个分类。

更改分类名称很慢(约 10 秒)。我多次尝试,还遇到了一次 502 错误。

我觉得这可能是 Discourse 的问题,或许与最近的更新有关?:thinking:
两个论坛都使用 2.6.0.beta2 版本。

能否有人在自己的论坛上尝试更改一个分类名称(包含数千或数万个主题的类别),并确保 Discourse 版本相同,以查看是否会出现缓慢或 502 错误?

2 个赞

在之前的 Discourse 版本中,重命名包含大量话题的分类时,操作速度很快吗?

我不记得之前的论坛(也是导入的)出现过 502 错误,但自三年前导入以来,我从未重命名过任何分类。我不确定重命名分类是否曾经很慢。
至于我的新论坛,规模更大,它是用我所提到的 Discourse 版本导入的,因此我无法与旧版本进行比较。

1 个赞

对此做一个修正:我认为我之前对某个类别执行过 Category.where(id: 21).update(name: "General"),那个类别我可能已经移除了其中的话题或其他操作。因为我现在不得不对多个类别多次使用这条命令,发现命令执行时长与目标类别中的帖子数量成正比。

基本上,这与我从界面更新类别时遇到的问题相同,只不过在命令行中不会超时。

对于包含超过 30000 个话题的类别,耗时可能超过一分钟;对于包含超过 15000 个话题的类别,耗时超过 30 秒;而对于话题较少的类别,执行速度则很快。

1 个赞

我们的论坛在过去 6 个月里出现的错误越来越多。我刚刚将服务器资源翻倍(16 核 CPU,64GB 内存),虽然运行状况大幅改善,但我发现了一个可复现的错误。

每次尝试重命名一个分类时,都会出现 502 错误。

2 个赞

你是否相应地调整了 app.yml 中的设置?

你应该查看日志,看看是否有线索。该分类有什么特殊之处吗?也许你的数据库索引已损坏?

2 个赞

是的!

这是否只是查看 forumwebsite.com/logs?我没有看到与重命名类别操作直接相关的错误。

我在“信息”级别看到了大量内容,但同样没有针对该操作的具体信息。

我应该尝试清除任何错误吗?

2 个赞

你可以在网页界面中查看 /admin/logs(或类似路径),以及类似以下内容:

tail -f /var/discourse/shared/standalone/logs/rails/production.log

这是凭记忆用键盘输入的,因此建议使用 Tab 自动补全功能。:slight_smile:

4 个赞