消息总线忽略 DISCOURSE_LONG_POLLING_BASE_URL 设置,始终使用“/”

问题描述

我最近在设置一个新的 CDN 服务,并在 app.yml 中配置了 DISCOURSE_LONG_POLLING_BASE_URL,以便将长轮询服务分离到原始服务器。

但是,消息总线仍然向 “/” 发出请求,而不是遵循配置的长轮询基础 URL。

复现步骤

  1. app.yml 中使用自定义 CDN URL 配置 DISCOURSE_LONG_POLLING_BASE_URL
  2. 重建并启动 Discourse
  3. 验证前端是否正确读取了环境变量值
  4. 在浏览器开发者工具中观察消息总线网络请求

一些截图

前端正确读取设置:

预期行为

当提供了 long_polling_base_url 设置时,消息总线应使用配置的 long_polling_base_url 设置来发出请求。

实际行为

消息总线继续向 “/” 发出请求,而忽略了 DISCOURSE_LONG_POLLING_BASE_URL 配置。

根本原因

问题出在 app/assets/javascripts/discourse/app/instance-initializers/message-bus.js

设置 messageBus.baseUrl 的逻辑未能正确处理 long_polling_base_url 站点设置,导致即使配置了自定义 URL,它也默认为 “/”。

修复

我在消息总线实例初始化器中识别并修复了该问题。该修复确保当 siteSettings.long_polling_base_url 被设置且不等于 “/” 时,它能正确配置消息总线基础 URL。

Pull Request: FIX: Respect long_polling_base_url setting for message bus configuration by chenglu · Pull Request #34477 · discourse/discourse · GitHub

验证

  • 确认前端正确读取了环境变量
  • 修复了消息总线初始化逻辑以遵循设置
  • 所有格式检查均通过
  • 消息总线现在正确使用了配置的长轮询基础 URL

此错误会影响任何使用自定义 CDN 设置进行长轮询的 Discourse 安装,阻止消息总线请求正确利用 CDN。


感谢 @David_Ghost,请在此处查看我们的讨论:

1 个赞

好的,修复得很棒,感谢您的贡献!

2 个赞