聊天频道不显示也不保存消息

几小时前我升级了,现在所有有自定义组的频道都显示空频道。我可以输入和发送消息,但如果我注销或刷新页面,频道将没有历史记录。

日志显示:

Message

NoMethodError (undefined method `replies_count' for nil:NilClass)
(eval):17:in `_fast_attributes'
app/controllers/application_controller.rb:545:in `render_json_dump'
app/controllers/application_controller.rb:532:in `render_serialized'
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:369: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'

Backtrace

plugins/chat/app/serializers/chat/message_serializer.rb:161:in `thread_reply_count'
(eval):17:in `_fast_attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:468:in `rescue in attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:455:in `attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:89:in `block in _serializable_array'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:79:in `map'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:79:in `_serializable_array'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:73:in `serializable_array'

Env

HTTP HOSTS: foorumi.katiska.eu

有什么想法吗?

编辑

如果这有什么意义的话,那些表现不佳的频道以前是子类别,但我将它们改为了顶级类别。

但我的用户声称在那次更改之前就已经出错了。

您好,

您是否曾经尝试过使用实验性的(并且隐藏的)线程设置?

我很久以前改过一些东西,但……不记得是什么了,但我很确定后来它不再是实验性的了。

你有什么想法吗?

它仍然是实验性的,并且今天隐藏起来,我的意思是你有权玩这个 :slight_smile: 我只是在尝试缩小可能问题的范围。

错误清楚地表明,如果我们尝试访问从未创建过线程的代码,就会发生这种情况,所以这很令人惊讶。

如果我在这里只更改了找到的内容,并且搜索没有显示任何相关内容,那么何时可以显示 Rails 中不再是默认设置的内容?

我将在 30 分钟内合并此内容,这将解决您的问题。我们将在下周对此进行进一步调查,但不想让您整个周末都因此受阻。

4 个赞

太好了!

我仍然想弄清楚我到底弄坏了什么……我很确定我之前只更改了(当时)新的搜索改进等设置。

但说实话……我倾向于尝试一些能让话题变得更好的东西,如果什么都没发生,我就会立刻忘记它。

(而且我一直在抱怨文档太懒了 :man_facepalming:

我现在没有更好的答案,但我们将在下周对此进行调查,我刚刚合并了它。我要下线了,如果问题没有解决,请告诉我,我明天会查看。

2 个赞

首先:您的修复没有帮助。抱歉。或者它有帮助——那个错误有点奇怪,
请试着跟着我 :wink:
我有 5 个频道:

  • 三个用于 TL1
  • 一个用于员工
  • 一个用于 5 人自定义组

我将除员工频道外的所有频道从子类别移到了顶部。

然后我尝试了类别预览组件的工作方式,但它不是我需要的,所以我禁用了它。之后我进行了重建以获取类别锁定插件。

它奏效了,除了 FKB Pro 主题和登录/注册模态框有一些奇怪的问题——那些只显示旋转加载图标。据我所知,这只发生在我的 iPad 上。

这时我意识到自定义组的聊天频道不再工作了。此外,员工组和 3 个 TL1 组中的 2 个只显示最近的消息。一个 TL1 组是完好的。

我尝试了安全模式并通过设置禁用了大多数插件。没有帮助,所以我开了这个帖子。

长话短说,在多次重建、删除和重新启用插件后:

  • 员工频道和两个 TL1 频道是低流量频道,我完全忘记了我在那里使用了 14 天规则;所以没有任何问题
  • 如果我同时安装了 Data Explorer 和 Category Lockdown 这两个插件,自定义组频道就会损坏,启用/禁用都无所谓
  • 在没有这两个插件的情况下重建修复了那个损坏的频道。当我用这两个插件重新重建时(这是一个词吗?),那个频道仍然是好的

我非专业的猜测是,当我第一次尝试类别预览时,然后我禁用了它,然后用类别锁定重建,最后一步是删除类别预览时,有些东西出了问题。修复一些奇怪的 SQL 错误或错误的字节需要完全删除 Data Explorer 和 Lockdown,然后进行较新的重新安装。

我不明白的是 Discourse 的错误日志——它如何适应这一切。

总之。我所有的插件都已重新上线,频道运行良好。

你好 @Jagster,我也是聊天团队的一员,我正在进一步调查此事。仔细阅读了你所做的工作,这些都不应该导致此错误。每条聊天消息都可能通过 thread_id 链接到数据库中的聊天线程,而你的一条消息的 thread_id 指向一个不知何故不存在的线程。我们没有任何删除线程的代码,所以也许是某个更新出了问题。

你能帮我运行这个查询并发布结果吗?这将让我们看到你是否存在普遍性问题,还是仅仅是一个奇怪的极端情况:

SELECT id, chat_channel_id, thread_id
FROM chat_messages
WHERE thread_id IS NOT NULL AND thread_id NOT IN (
  SELECT id FROM chat_threads
);

我使用了 Data Explorer,得到了以下结果(我相信您能读懂 JSON :wink:

{"success":true,"errors":[],"duration":0.5,"result_count":2,"params":{},"columns":["id","chat_channel_id","thread_id"],"default_limit":1000,"rows":[[10721,14,152],[10744,14,152]]}

出问题的频道是 ID 为 14 的频道。

1 个赞

谢谢,我想我们对此 bug 采取“观望”的方法,因为:

  1. 不清楚它是由什么引起的,并且
  2. 在我检查的几个站点上尚未重现
  3. 它只在您的网站的一个地方发生过

再检查一下,只需运行此查询:

SELECT * FROM chat_threads WHERE id = 152;

并确保它不返回任何内容。

确认;零,什么都没有

当然。当找不到任何东西时,真的很难修复。

谢谢大家!

1 个赞