用户合并失败,第三方插件导致数据库条目损坏

原始标题:论坛首页无法访问(空白屏幕或 404 错误)

我是 SocialHub 论坛的版主,该论坛位于 https://socialhub.activitypub.rocks,是驱动联邦宇宙(Fediverse)社交领域的 ActivityPub 协议的技术论坛。

目前,为期四天的 ActivityPub 大会正在进行中,论坛上的活动也比平时更加频繁。今天早上我发现,当直接通过 URL 访问论坛主页时,会显示一个完全空白的屏幕(没有返回任何 HTML 内容)。

然而,深层链接(例如 https://socialhub.activitypub.rocks/t/spritely-project-the-super-exciting-future-of-fediverse/928)仍然可以正常工作,并且可以访问其他功能,如搜索和管理面板。当点击左上角的标志时,显示的不再是空白屏幕,而是一页 404 错误页面。

我已经通知了负责服务器管理的相关人员,也许只需重启服务器即可解决问题。但以防万一有人意识到这是一个更严重的问题,我非常期待您的反馈,以便我们能在今天大会演讲开始前恢复正常运行。

附:论坛当前运行版本为 v2.6.0.beta1

您可能需要查看资源使用情况。访问量的增加意味着资源使用量也会增加。

增加服务器资源有助于应对增加的访问量。

1 个赞

谢谢!服务器管理员尚未上线,但我已将此链接转发给他们 :slight_smile:

你好,我已尝试升级到最新版本,但未成功,并尝试禁用昨天添加的 Force Mobile Homepage 组件。

如有进一步指导,将不胜感激。我将查看日志以查找相关错误……

以下是从容器内部访问主页时的输出:

Started GET "/" for 37.172.69.223 at 2020-10-04 07:32:15 +0000
Processing by CategoriesController#index as HTML
Completed 404 Not Found in 281ms (ActiveRecord: 0.0ms | Allocations: 67648)
ActiveRecord::RecordNotFound (Couldn't find all Users with 'id': (36, 50) (found 1 results, but was looking for 2).)
lib/plugin/instance.rb:259:in `public_send'
lib/plugin/instance.rb:259:in `block (2 levels) in add_to_class'
(eval):48:in `_fast_attributes'
lib/freedom_patches/ams_include_without_root.rb:57:in `include!'
app/controllers/categories_controller.rb:61:in `block (2 levels) in index'
app/controllers/categories_controller.rb:40:in `index'
app/controllers/application_controller.rb:354:in `block in with_resolved_locale'
app/controllers/application_controller.rb:354:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:68:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:336:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:22:in `call'
lib/middleware/request_tracker.rb:176:in `call'
1 个赞

所以,将主页设置从“分类和最新”改为“分类和精选”后,主页访问权限就恢复了。目前只能先这样了……我怀疑是组件之间的交互问题,但具体情况还得再看看。如有任何进一步的见解,非常欢迎。演出必须继续 :slight_smile:

1 个赞

您的问题是加载最新文章时出现 404 错误。

是否有人更改了此处的命名?

进入设置,查找“最新”选项,看看会发生什么。

感谢 @IAmGav 的建议:我们目前没有任何与“最新”相关的字符串的自定义选项。

确实有些页面仍然无法正常工作,包括我们实际上需要的那个分类 :frowning:

考虑到强制移动端主页组件的代码,我很好奇该如何检查数据库中是否有与 setDefaultHomepage(settings.homepage); 相关的变更。但我觉得这不会影响 分类。所以一定还有其他原因。


我刚清空了日志,以确保当前的错误确实没有被记录。这看起来像是 /latest/top 以及 #meeting 分类中的一个 bug。还不确定具体是怎么回事……正在查看容器内的日志以获取更多信息……可能与 #meeting 分类中的某个功能异常的帖子有关……

我认为问题出在 ActiveRecord::RecordNotFound (找不到所有 'id' 为 (36, 50) 的用户(找到 1 条结果,但需要 2 条)。)

这些 ID 对应一个已合并的用户账户,但该过程似乎已损坏……

我也认为这是问题所在。我不是专家,但猜测可能有一篇帖子引用了已不存在的旧账户(它出现在“热门”、“最新”和会议分类中)。如果这是问题所在,执行 SQL 查询删除该帖子或更新其中的用户 ID 或许是个办法?语法应该怎么写?

管理员操作中的“合并用户”筛选器未显示任何日志。我认为合并过程可能以某种方式失败了。@团队,如何调查并解决用户合并失败的问题?不过结果似乎不错:用户账号已存在,并包含两个电子邮件地址。某些帖子中一定存在某些悬空 ID……

好的,我们将问题缩小到了单个主题…

1 个赞

这可能会有所帮助

不,它显示(源)用户不存在。我怀疑步骤 DiscourseEvent.trigger(:merging_users, @source_user, @target_user) 没有完成。在哪里可以找到相关代码?

我们开始吧…

[39] pry(main)> PostReplyKey.where(user_id: 36)
=> [#<PostReplyKey:0x0000558954b92d68 id: 9793, user_id: 36, post_id: 3409, reply_key: "00257885-fe73-e76d-09fb-f0f708c2f032", created_at: 2020-10-03 19:37:20 UTC +00:00, updated_at: 2020-10-03 19:37:20 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd6e78 id: 9120, user_id: 36, post_id: 3174, reply_key: "b726e441-1c6c-bd60-27ac-8d8d5feef3d7", created_at: 2020-10-02 14:21:48 UTC +00:00, updated_at: 2020-10-02 14:21:48 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd6db0 id: 9802, user_id: 36, post_id: 3413, reply_key: "86e179a1-7516-616c-1040-c26c0539f39d", created_at: 2020-10-03 19:41:36 UTC +00:00, updated_at: 2020-10-03 19:41:36 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd6ce8 id: 9821, user_id: 36, post_id: 3418, reply_key: "573f48a4-8263-4759-44f0-f6cb26b66f38", created_at: 2020-10-03 20:37:40 UTC +00:00, updated_at: 2020-10-03 20:37:40 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd6c20 id: 9822, user_id: 36, post_id: 3419, reply_key: "9371479c-eeb4-1009-176d-761a854a4ddb", created_at: 2020-10-03 20:40:08 UTC +00:00, updated_at: 2020-10-03 20:40:08 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd6b58 id: 9400, user_id: 36, post_id: 3245, reply_key: "e1cd57aa-a811-21f9-5e24-84439e184a8e", created_at: 2020-10-02 21:35:12 UTC +00:00, updated_at: 2020-10-02 21:35:12 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd6a90 id: 8613, user_id: 36, post_id: 3067, reply_key: "407edb15-e89d-4369-9fee-1e5eab83385d", created_at: 2020-09-30 13:50:17 UTC +00:00, updated_at: 2020-09-30 13:50:17 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd69c8 id: 9517, user_id: 36, post_id: 3288, reply_key: "140a48d2-1a40-d429-f6e2-2bbe37b4865d", created_at: 2020-10-03 09:54:40 UTC +00:00, updated_at: 2020-10-03 09:54:40 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd6900 id: 9736, user_id: 36, post_id: 3388, reply_key: "76cacf9b-5353-0653-806d-f3c2df6689eb", created_at: 2020-10-03 18:37:11 UTC +00:00, updated_at: 2020-10-03 18:37:11 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd6838 id: 8643, user_id: 36, post_id: 3011, reply_key: "6d384213-98db-652c-89eb-1979731bb311", created_at: 2020-09-30 20:55:31 UTC +00:00, updated_at: 2020-09-30 20:55:31 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd6770 id: 9772, user_id: 36, post_id: 3400, reply_key: "1e9e0b2e-ecd6-3654-d0da-6e01982a890f", created_at: 2020-10-03 19:22:38 UTC +00:00, updated_at: 2020-10-03 19:22:38 UTC +00:00>]

所以我试着找出如何处理这个问题……将它们授予现有用户并不能解决问题,删除它们也无济于事。

下一步:重新构建涉及的讨论主题,销毁旧的,看看会发生什么——除非有人提出更好的主意……

1 个赞

PostReplyKey 指的是邮件中的回复地址,它不会影响主题列表的渲染。

查看堆栈跟踪,它在 TopicListSerializer 转储过程中失败,具体位置似乎在 lib/instance/public.rb 中。

请尝试检查旧用户 ID 的主题推荐用户列表(即首页上显示的一组头像)。

1 个赞

@riking,感谢你的回复……据我所知,除了 PostReplyKey 之外,没有提到这个缺失的用户 ID。但这可能不是真正的旧用户 ID,因为我不知道那个 ID 是什么。你觉得我该如何找到它——或者:我应该从日志中 grep 什么内容?

如果是主题特色用户,此查询应能找到:

SELECT id
FROM topics
WHERE featured_user1 = 1234
OR featured_user2 = 1234
OR featured_user3 = 1234
OR featured_user4 = 1234
OR last_post_user_id = 1234

使用旧的用户 ID 查询未返回任何结果,但使用新的用户 ID 查询则返回了一个主题,该主题此前已被识别为有问题。我已将该主题移至另一个分类,现在 ActivityPub Conference 2020 - SocialHub 分类确实重新可见了。

现在我猜测在主题 951 相关的数据中,某处仍引用了缺失的用户 ID 36,但截至目前我尚未找到。或者,关于用户 295,是否还有其他我忽略的依赖关系?

您有该错误的堆栈跟踪吗?

除了我在 User merge failed, corrupted database entries due to third party plugin - #4 by hellekin 发布的帖子以及随后添加的评论外,没有其他内容:

1 个赞

哦,我漏掉了 User merge failed, corrupted database entries due to third party plugin - #4 by hellekin 中的堆栈跟踪信息。看来是某个插件导致的问题。我猜其中一个插件存储了某些未被合并的用户信息。能否请您提供一下已安装插件的列表?

2 个赞