Предпросмотр не работает при использовании object store — неверный URL markdown-it

При настройке Object Store предварительный просмотр тем/сообщений не работает.

Discourse настроен с использованием Object Store.
Установка выполнена в 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

При проверке инспектора браузера URL для markdown-it-bundle указывает на https:https://forum-beta-liiib-re.hot-objects.liiib.re/assets/markdown-it-bundle-9d939740bdeca330e5984bed41d12eab63736c1f720ab68e0c2a2d672c01adc2.br.js.

Префикс https: не должен добавляться к DISCOURSE_S3_CDN_URL, так как он уже там есть.

В консоли я вижу следующую ошибку:

Загрузка не удалась для <script> с источником "https://discourse.liiib.re/https://forum-beta-liiib-re.hot-objects.liiib.re/assets/markdown-it-bundle-9d939740bdeca330e5984bed41d12eab63736c1f720ab68e0c2a2d672c01adc2.br.js".

Полагаю, мой браузер перенаправляет URL https:https://... на этот адрес.

Я безуспешно пытался найти, где именно устанавливается этот URL.

Если кто-то сможет указать мне правильное направление :slight_smile:

Спасибо за вашу помощь

Думаю, он здесь discourse/app/helpers/application_helper.rb at 70af45055ae24dc7eb1a20678a52ed3ec69421c3 · discourse/discourse · GitHub

Я тоже так предположил, просто забыл упомянуть об этом.

Вообще, я не на 100% уверен, так как у меня нет полноценной среды разработки для тщательного тестирования всего, но похоже, что проблема не оттуда.

Насколько я видел, 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">

Похоже, что именно JS добавляет неверный URL с префиксом https:. Хотя я так и не смог найти, откуда он берется.

Проблема возникает только при открытии редактора, когда появляется тег:
<script src="https:https://forum-beta-liiib-re.hot-objects.liiib.re/assets/markdown-it-bundle-9d939740bdeca330e5984bed41d12eab63736c1f720ab68e0c2a2d672c01adc2.br.js"></script>.

Я не думаю, что это сработает, если URL CDN S3 является поддоменом конечной точки S3. Можете ли вы попробовать использовать разные поддомены одного уровня для обоих?

Снова в строю. Похоже, вы правы.

Я попробовал установить DISCOURSE_S3_CDN_URL как подпуть к бакету https://hot-objects.liiib.re/forum-beta-liiib-re, и теперь всё работает.

Как вы считаете, разумно ли разрешить использование S3 CDN в качестве поддомена конечной точки S3?

В моём случае, который может быть схож с другими настройками для самостоятельного размещения, я не использую внешний CDN (nginx поверх minio можно считать CDN), поэтому мне не нужно настраивать его на другом домене.

На самом деле я создал бакет на поддомене, потому что, как я понимаю, это требуется для управления загрузками в Discourse.

В любом случае, проблема решена, и у меня всё работает. Спасибо за помощь!