ウェルカムバナーを有効にする設定の理解が難しい

可能性はありますが、私としては、設定の変更間に見られるこの奇妙な遅延を説明するには至りません。また、初期移行以降は古いサイト設定値を使用しないため、影響はないと考えています。

これは興味深いですね…有効になっているにもかかわらず、あなたのサイトのFoundationで再び欠落しています、Moin。キャッシュを SiteSetting.clear_cache!(expire_theme_site_setting_cache: true) でクリアしても、キャッシュはクリアされていません。ここで2つの異なる結果が得られます。

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))

そして機能しました?? それから管理画面で設定を再度変更しましたが、キャッシュが保持されています :thinking: メモリ内の theme_site_settings で何か奇妙なことが起こっていると思います。

なぜなら、それは以下を返しているからです。

 -2=>
 {:enable_welcome_banner=>false, :search_experience=>"search_field"},
 -1=>
 {:enable_welcome_banner=>true, :search_experience=>"search_field"}}

一方、DBから取得すると、正しい 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

わかりました…ローカルで再現できるようになったと思います。これはマルチプロセスバグです。基本的に、設定のインメモリバージョンはプロセスAで管理者が変更しますが、その後、ユーザーがプロセスBにリクエストを送信し、新しいキャッシュ値を設定することになり、キャッシュはメモリ内の古い値を持つことになります。

他のサイト設定では、誰かが変更したときにMessageBus経由ですべての設定をリフレッシュすることでこれを回避しています。

明日には修正を試みます(もう終業時間なので)。モインさん、お待ちいただきありがとうございます!

「いいね!」 4

修正をマージしました。テスト方法を特定する必要があったため、予想よりも時間がかかりました。

Moin、あなたのサイトはまもなくデプロイします。

編集:修正がデプロイされました。

「いいね!」 4

他に問題がないようなので、これで閉じます。問題があればお知らせください。