也许……但对我来说,这并不能解释你在设置更改之间看到的这种奇怪的延迟。而且,除了初始迁移之外,我们不会使用旧的站点设置值,所以我认为这不应该影响事物。
好的,这很有趣……它又在你的网站上的 Foundation 中丢失了,尽管它在管理界面中已启用。使用 SiteSetting.clear_cache!(expire_theme_site_setting_cache: true) 清除缓存没有清除缓存。我在这里得到两个不同的结果:
discourse(prod)> SiteSetting.theme_site_settings_json_uncached(-1)
=> "{\"enable_welcome_banner\":true,\"search_experience\":\"search_field\"}"
discourse(prod)> SiteSetting.theme_site_settings_json(-1)
=> "{\"enable_welcome_banner\":false,\"search_experience\":\"search_field\"}"
然后我直接运行了这个:
Discourse.cache.delete(SiteSettingExtension.theme_site_settings_cache_key(-1))
然后它奏效了??然后我在管理中再次更改了你的设置,缓存仍然存在
我认为这里有一些奇怪的事情发生在内存中的 theme_site_settings:
因为这给出了:
-2=>{:enable_welcome_banner=>false, :search_experience=>"search_field"},
-1=>{:enable_welcome_banner=>true, :search_experience=>"search_field"}}
然而,如果我从数据库获取,我会得到这个,它具有正确的 false 值:
ThemeSiteSetting.where(theme_id: -1)
=>
[#<ThemeSiteSetting:0x00007f9164acb2d0 id: 3, theme_id: -1, name: "enable_welcome_banner", data_type: 5, value: "f", created_at: "2025-07-16 07:04:11.117747000 +0000", updated_at: "2025-08-11 06:35:07.606301000 +0000">,
#<ThemeSiteSetting:0x00007f9164acb190 id: 13, theme_id: -1, name: "search_experience", data_type: 7, value: "search_field", created_at: "2025-07-16 07:04:11.117747000 +0000", updated_at: "2025-07-20 20:56:49.405228000 +0000">]
discourse(prod)> Theme.find(-1).themeable_site_settings
=>
[{:setting=>:enable_welcome_banner, :default=>true, :description=>"Display a banner on your main topic list pages to welcome members and allow them to search site content", :humanized_name=>"Enable welcome banner", :type=>"bool", :value=>false},
{:setting=>:search_experience,
:default=>"search_icon",
:description=>"The default position and appearance of search on desktop devices",
:humanized_name=>"Search experience",
:type=>"enum",
:valid_values=>[{:name=>"search.experience.search_field", :value=>"search_field"}, {:name=>"search.experience.search_icon", :value=>"search_icon"}],
:translate_names=>true,
:value=>"search_field"}]
我们在这里进行了一些操作:
以及这里:
这在这里被调用:
所以我不确定为什么会发生这种情况,但这可以解释为什么缓存仍然存在,因为缓存是从内存中的这个对象构建的。
编辑:另外请注意,我仍然无法在其他地方重现此问题,但在你的网站上我可以相当可靠地重现它。
3 个赞
好的……我想我已经在本地重现了这个问题,这是一个多进程 bug。基本上,进程 A 中的管理员更改了内存中的设置,然后用户通过请求命中进程 B,最终由用户设置新的缓存值,而缓存最终在内存中保留了旧值。
其他站点设置通过在任何人更改时通过 MessageBus 刷新所有设置来解决此问题:
我明天会尝试修复这个问题(现在是我的下班时间了),感谢你的耐心 Moin!
4 个赞
已合并修复,但由于需要弄清楚如何测试,因此花费的时间比预期的要长:
Moin,我很快就会部署你的网站。
编辑:已部署修复
4 个赞
由于我没有收到进一步问题的反馈,因此关闭此问题。如果您遇到问题,请随时告知我。