Недавние изменения ломают настройку подпапок?

Извините, если я неправильно определил проблему, но недавно после обновления в настройке с подпапкой, которая ранее работала, возникли некоторые трудности. Возможно, в последнее время произошло регрессионное изменение? В частности, я самостоятельно размещаю Discourse, используя настройку с подпапкой, описанную здесь. До недавнего времени всё работало (насколько я могу судить).

В настоящее время при входе через SSO или при переключении в анонимный режим (и, возможно, в других ситуациях, которые я ещё не обнаружил) меня перенаправляют на https://my_machine/discourse_path_stuff, а не на https://my_machine/forum/discourse_path_stuff. Также, когда я перехожу по адресу https://my_machine/forum (правильная конечная точка), адресная строка изменяется на https://my_machine (подпапка удаляется), хотя большинство ссылок ведут в нужные места.

К сожалению, я не помню, на каком коммите всё работало, но уверен, что это было в рамках версии “2.4.0.beta10”, и это было примерно в последние 10 дней. Сейчас я работаю на коммите bd49d4af1a.

Извините, если я просто что-то делаю неправильно. Я с радостью помогу в поиске проблемы, если у вас будут предложения, куда стоит смотреть.

1 лайк

Можете поделиться URL сайта? Вы используете наш протокол SSO или какую-то стратегию OAuth2 / omniauth?

2 лайка

Конечно, он находится по адресу https://py.mit.edu/forum (но в данный момент доступ к нему для публичного просмотра закрыт). https://py.mit.edu/forum/login демонстрирует проблему (хотя после того, как мы столкнулись с этим, я добавил специальное правило NGINX для перенаправления 302 с https://py.mit.edu/login обратно на https://py.mit.edu/forum/login, что стало рабочим решением для части SSO, по крайней мере).

Мы используем протокол SSO от Discourse, который до этого работал безупречно. Процесс рукопожатия по-прежнему проходит нормально, но в конце происходит перенаправление не туда. Ключ "return_sso_url" в полезной нагрузке SSO корректно возвращается на наш конечный пункт SSO (с /forum).

Я также пробовал выполнить пересборку, но это, похоже, не решило проблему.

К сожалению, отладка может оказаться сложной, так как я не очень комфортно чувствую себя, предоставляя доступ посторонним людям, поскольку этот экземпляр создан для учебного курса, и я не хочу делиться данными студентов с третьими сторонами (даже если лично доверяю вам!). Однако, если это поможет, я с радостью попробую воспроизвести эту настройку на другом сервере, к которому смогу предоставить вам доступ…

3 лайка

Я также заметил, что ссылка для входа/выхода из анонимного режима использует window.location.reload() для перезагрузки страницы после отправки запроса на конечную точку для переключения в анонимный режим. Таким образом, эта перезагрузка обязательно увидит переписанный URL (больше не содержащий /forum), что и вызывает эту проблему (не уверен, похожа ли ситуация с проблемами SSO).

Я посмотрю последние изменения, чтобы проверить, является ли то, что (как я думаю?) переписывает window.location, недавним добавлением.

Кроме того, Discourse.getURL('/login') всё ещё возвращает мне правильный результат (с /forum).

1 лайк

Пути сбрасываются без префикса подпапки в адресной строке браузера.

Пример:
Я перехожу на example.com/forum → после загрузки форума в адресной строке отображается example.com.
Затем я нажимаю на «Последние» → происходит переход к последним сообщениям, и в адресной строке отображается example.com/forum/latest.
Я обновляю страницу в браузере, сайт перезагружается, и в адресной строке отображается example.com/latest.
При повторном обновлении на странице example.com/latest возникает ошибка 404 (поскольку мой nginx маршрутизирует только /forum к Discourse).

Предварительный просмотр ссылки в левом нижнем углу браузера отображается как example.com/latest, example.com/new и т. д. Обновление темы также удаляет /forum из URL, но затем он снова меняется обратно на /forum/t/[…].

Ранее я использовал версию 2.4.0.beta2 и не помню этой проблемы.

3 лайка

Была ли эта установка создана в соответствии с поддержкой подпапок с Docker? Можете ли вы предоставить ссылку на неё?

7 лайков

Да, я также попробовал это на чистой локальной установке и столкнулся с той же проблемой:

app.yml

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"

expose:
 - 80:80

params:
  db_default_text_search_config: "pg_catalog.english"
  version: tests-passed

env:
  LANG: en_US.UTF-8
  UNICORN_WORKERS: 3
  DISCOURSE_RELATIVE_URL_ROOT: /forum
  DISCOURSE_HOSTNAME: localhost
  DISCOURSE_DEVELOPER_EMAILS: yyy

  DISCOURSE_SMTP_ADDRESS: yyy
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: yyy@yyy.yyy
  DISCOURSE_SMTP_PASSWORD: yyy
  DISCOURSE_SMTP_AUTHENTICATION: login

volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
            - git clone https://github.com/discourse/docker_manager.git

run:
    - exec:
        cd: $home
        cmd:
          - mkdir -p public/forum
          - cd public/forum && ln -s ../uploads && ln -s ../backups
    - replace:
       global: true
       filename: /etc/nginx/conf.d/discourse.conf
       from: proxy_pass http://discourse;
       to: |
          rewrite ^/(.*)$ /forum/$1 break;
          proxy_pass http://discourse;
    - replace:
       filename: /etc/nginx/conf.d/discourse.conf
       from: etag off;
       to: |
          etag off;
          location /forum {
             rewrite ^/forum/?(.*)$ /$1;
          }
5 лайков

Мне удалось воспроизвести проблему при установке в подпапку. Мы исправим это.

6 лайков

Отлично, спасибо! Рад, что я не сошел с ума.

Однако, изучая недавние (или почти недавние) коммиты, я не смог найти очевидного места, где происходит эта переписывание. Не могли бы вы указать, где именно в коде это происходит/происходило? (Я сейчас пытаюсь ознакомиться с кодовой базой).

1 лайк

Могли бы! Но это не моя компетенция. Я просто «тот самый парень» в команде, у которого локальная установка в подпапке. Но я не инженер. Дэвид сможет направить вас в нужном направлении, когда он приступит к работе над этой проблемой позже на этой неделе.

6 лайков

Почти наверняка это изменение, которое было сделано для этой проблемы. Я точно не уверен, в чём именно заключается проблема, но займусь этим :eyes:

6 лайков

Оказалось, что это никак не связано с тем коммитом. Я нашёл источник проблемы, и исправление уже готовится:

12 лайков

Отличная работа, детектив :man_detective:, @david :clap:

6 лайков

Это уже объединено — @hartz и @bokos, можете ли вы подтвердить, что проблема решена после обновления?

5 лайков

После небольшого тестирования всё действительно снова работает. Спасибо, @david!

2 лайка