最近の変更でサブフォルダ設定が壊れていますか?

もし私がこの問題を誤診していたら申し訳ありませんが、以前は正常に動作していたサブフォルダ構成でアップグレード後にいくつかの問題が発生しました。そのため、最近どこかで回帰が発生したのではないかと考えています。

具体的には、こちら で説明されているサブフォルダ構成で 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 のルールを追加して、https://py.mit.edu/loginhttps://py.mit.edu/forum/login へ 302 リダイレクトさせるように設定しました。これにより、少なくとも SSO 部分は回避策として機能しています)。

Discourse の SSO プロトコルを使用していますが、以前は確かにスムーズに動作していました。ハンドシェーク自体は問題なく行われているようですが、最終的に誤った場所へリダイレクトされてしまいます。SSO ペイロード内の "return_sso_url" キーは、(/forum を含めて)正しく私たちの SSO エンドポイントへ戻ってきています。

再構築を試みましたが、問題は解決しませんでした。

残念ながら、このインスタンスは授業用であり、学生データを外部の第三者と共有することに抵抗があるため(個人的には信頼していますが)、外部の人間にアクセス権を与えることが難しく、デバッグが難しいかもしれません。ただし、参考になれば、別のサーバー上でこの設定を再現し、アクセス権を提供することも喜んで行います。

「いいね!」 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/latestexample.com/new などと表示されます。トピックをリフレッシュすると URL から /forum が削除されますが、その後再び /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

素晴らしい探偵の働きですね、@david :man_detective: :clap:

「いいね!」 6

これでマージされました - @hartz@bokos の皆さん、アップデート後に問題が解決したか確認していただけますか?

「いいね!」 5

少しテストしたところ、確かに再び動作しているようです。ありがとうございます、@david

「いいね!」 2