你好,我正在搭建一个论坛网站。
我尝试修改了站点设置并刷新页面,但有时无法获取到更新后的值。
每次刷新似乎都显示的是之前缓存的值。
我调整了 Puma worker 的数量,但问题依旧。
已确认修改后的值已写入数据库。
这是 message_bus 的问题吗?
如果是,我该如何调整相关配置?
请回复我,谢谢!
你好,我正在搭建一个论坛网站。
我尝试修改了站点设置并刷新页面,但有时无法获取到更新后的值。
每次刷新似乎都显示的是之前缓存的值。
我调整了 Puma worker 的数量,但问题依旧。
已确认修改后的值已写入数据库。
这是 message_bus 的问题吗?
如果是,我该如何调整相关配置?
请回复我,谢谢!
您究竟是如何安装 Discourse 的?
我也遇到了同样的问题。如果将 Puma 的 worker 数量设置为 1,问题就会消失。看起来每个 worker 都持有站点设置对象的一个副本,当一个 worker 执行更新时,其他 worker 永远不会察觉到该更新。
不幸的是,这个问题也存在于包含多个 Discourse 服务器的扩展环境中,因此仅仅将 worker 数量设置为 1 并不能彻底解决问题。
我需要问同样的问题:您具体是如何安装 Discourse 的?
如果按照唯一的 支持方法 进行安装,我们不会使用 Puma,因此不会出现此错误。
我正在尝试进行插件开发,因此我按照 README 中的链接设置了 Ubuntu 开发环境。当我运行命令 bundle exec rails server --binding=0.0.0.0 时,应用会通过 Puma 启动。
我见过的类似情况只有:如果服务器已停止,浏览器有时会返回一个 JSON 文件或网站的缓存版本。
服务器还在运行吗?
我还会做的另一件事是打开另一个终端并运行:
./bin/rails c
然后用类似下面的方式在那里修改设置:
SiteSetting.title=“我的标题”
服务器仍在运行。我已从日志中确认 Discourse 正在处理该请求。在调试此问题时,我也已在浏览器的开发者控制台中禁用了缓存。
为什么你在进行插件开发时要进行扩展部署?
这些症状表明你的内部 MessageBus 出现了故障,因此你的 Redis 设置可能存在问题。浏览器中的实时更新也可能无法正常工作。
我并不是为了插件开发而扩展功能,只是在几种不同场景下测试,以缩小问题范围并确保我理解了它。如果 MessageBus 本应处理这种情况,我会进一步研究。
在调试过程中,我注意到 app/models/site_setting.rb 仍在触发 :site_setting_saved 事件,该事件似乎已从应用中移除,并被 :site_setting_changed 取代。现在已没有任何监听器监听 :site_setting_saved 事件。
你也可以使用 bin/unicorn 在开发环境中运行 Unicorn Web 服务器。