オブジェクトストア使用時のプレビューが機能しない - markdown-it の URL が間違っています

オブジェクトストアを設定すると、トピック/投稿のプレビューが機能しません。

Discourse はオブジェクトストアで設定されています。
ドキュメントに従って Docker にインストールしました。
Discourse バージョン: 2.8.0.beta11

S3 設定の環境変数はこちらです。

  DISCOURSE_CDN_URL: https://discourse.liiib.re
  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: default
  DISCOURSE_S3_ENDPOINT: https://hot-objects.liiib.re
  DISCOURSE_S3_ACCESS_KEY_ID: ACCESS_KEY_ID
  DISCOURSE_S3_SECRET_ACCESS_KEY: SUPER_SECRET_KEY
  DISCOURSE_S3_CDN_URL: https://forum-beta-liiib-re.hot-objects.liiib.re
  DISCOURSE_S3_BUCKET: forum-beta-liiib-re
  DISCOURSE_S3_INSTALL_CORS_RULE: false

ブラウザインスペクターで確認すると、markdown-it-bundle の URL は https:https://forum-beta-liiib-re.hot-objects.liiib.re/assets/markdown-it-bundle-9d939740bdeca330e5984bed41d12eab63736c1f720ab68e0c2a2d672c01adc2.br.js を指しています。

DISCOURSE_S3_CDN_URL には既に https: が含まれているため、プレフィックスを付けるべきではありません。

コンソールには次のエラーが表示されます。

Loading failed for the <script> with source “https://discourse.liiib.re/https://forum-beta-liiib-re.hot-objects.liiib.re/assets/markdown-it-bundle-9d939740bdeca330e5984bed41d12eab63736c1f720ab68e0c2a2d672c01adc2.br.js”.

ブラウザが https:https://... URL をこの URL にリダイレクトしているようです。

この URL がどこで設定されているのか、見つけようとしましたが、見つかりませんでした。

もし、どなたか正しい方向性を示していただければ幸いです :slight_smile:

ご協力ありがとうございます。

「いいね!」 2

ここにあると思います。discourse/app/helpers/application_helper.rb at 70af45055ae24dc7eb1a20678a52ed3ec69421c3 · discourse/discourse · GitHub

それも私の推測でした。言及するのを忘れました。

完全な開発環境がないため、すべてを徹底的にテストすることはできませんが、そこから来ているようには見えません。

私が見た限りでは、script_asset_path('markdown-it-bundle') は正しい URL を返しています。そして、これは問題なさそうなこのメタ HTML タグを構築するために使用されていると思います。

<meta id="data-discourse-setup" data-cdn="https://discourse.liiib.re" data-base-url="https://discourse.liiib.re" data-base-uri="" data-environment="production" data-letter-avatar-version="5_c12935382690395be92856801563c2b7" data-markdown-it-url="https://forum-beta-liiib-re.hot-objects.liiib.re/assets/markdown-it-bundle-9d939740bdeca330e5984bed41d12eab63736c1f720ab68e0c2a2d672c01adc2.br.js" data-service-worker-url="service-worker.js" data-default-locale="en" data-asset-version="be5bda1657984e9e27d7d3c27ab24add" data-disable-custom-css="false" data-highlight-js-path="/highlight-js/discourse.liiib.re/084d101d62e4ceb91462fa1464b341511141973f.js" data-svg-sprite-path="/svg-sprite/discourse.liiib.re/svg-1-c105fc3106297bc864bbadbd418cf380c71e3a4b.js" data-enable-js-error-reporting="true" data-color-scheme-is-dark="false" data-user-color-scheme-id="4" data-user-dark-scheme-id="1" data-s3-cdn="https://forum-beta-liiib-re.hot-objects.liiib.re" data-s3-base-url="//forum-beta-liiib-re.hot-objects.liiib.re">

https: プレフィックスで間違った URL を設定しているのは JavaScript のようです。どこから来ているのかは見つけられませんでした。

エディタを開いたときにのみ、<script src="https:https://forum-beta-liiib-re.hot-objects.liiib.re/assets/markdown-it-bundle-9d939740bdeca330e5984bed41d12eab63736c1f720ab68e0c2a2d672c01adc2.br.js"></script> が表示されます。

「いいね!」 2

S3 CDN URL が S3 エンドポイントのサブドメインである場合、機能しないと思います。両方で同じレベルの異なるサブドメインを使用してみてください。

「いいね!」 2

承知しました。おっしゃる通りでした。

DISCOURSE_S3_CDN_URL をバケットのサブパス https://hot-objects.liiib.re/forum-beta-liiib-re として設定したところ、動作するようになりました。

S3 CDN を S3 エンドポイントのサブドメインとして許可することは妥当だと思いますか?

私のケースでは、他のセルフホスト環境と同様に、外部 CDN (minio の上に nginx を配置したもの CDN とみなすことができます) を使用していないため、別のドメインに設定する必要はありません。
Discourse がアップロードを管理するために必要だと考え、サブドメインバケットを設定しました。

いずれにせよ、これで問題は解決し、動作しています。助けてくれてありがとう!

「いいね!」 1