問題の説明
最近、新しいCDNサービスをセットアップし、app.ymlでDISCOURSE_LONG_POLLING_BASE_URLを設定して、ロングポーリングサービスを元のサーバーから分離しようとしていました。
しかし、メッセージバスは設定されたロングポーリングの基本URLを尊重せず、「/」にリクエストを送信し続けています。
再現手順
app.ymlでカスタムCDN URLを使用してDISCOURSE_LONG_POLLING_BASE_URLを設定します。- Discourseを再構築して起動します。
- フロントエンドが環境変数の値を正しく読み取っていることを確認します。
- ブラウザの開発者ツールでメッセージバスのネットワークリクエストを観察します。
いくつかのスクリーンショット
フロントエンドが設定を正しく読み取っている:
期待される動作
設定が提供されている場合、メッセージバスはリクエストに設定された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に感謝します。ディスカッションはこちらをご覧ください:
