问题描述
我最近在设置一个新的 CDN 服务,并在 app.yml 中配置了 DISCOURSE_LONG_POLLING_BASE_URL,以便将长轮询服务分离到原始服务器。
但是,消息总线仍然向 “/” 发出请求,而不是遵循配置的长轮询基础 URL。
复现步骤
- 在
app.yml中使用自定义 CDN URL 配置DISCOURSE_LONG_POLLING_BASE_URL - 重建并启动 Discourse
- 验证前端是否正确读取了环境变量值
- 在浏览器开发者工具中观察消息总线网络请求
一些截图
前端正确读取设置:
预期行为
当提供了 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。
验证
- 确认前端正确读取了环境变量
- 修复了消息总线初始化逻辑以遵循设置
- 所有格式检查均通过
- 消息总线现在正确使用了配置的长轮询基础 URL
此错误会影响任何使用自定义 CDN 设置进行长轮询的 Discourse 安装,阻止消息总线请求正确利用 CDN。
感谢 @David_Ghost,请在此处查看我们的讨论:
