エラー:問題が発生しました - 「ルート処理中にエラーが発生しました:discovery.categories」

Discourse を更新した後、1 人の管理者ユーザーに奇妙なエラーが発生しています。このエラーは、ユーザーが「戻る」ボタンまたはサイトロゴをクリックした際に発生します。サイトルート/ホームへ移動する JavaScript がトリガーされるようですが、代わりに以下のエラーが発生します。

視覚的なエラー表示は以下の通りです:

JS コンソールでは:
console

また、/admin へ移動しようとするなど、ナビゲーションバーのあらゆるクリックでも同様の現象が発生することを確認しました。

この問題をさらに追跡するためのアイデアはありますか?production.log やその他にもエラーが見当たらないため、JS に起因するものと思われるこの現象は、本当に頭を悩ませる問題です。

Discourse セーフモードの使い方を試しましたか?(Using Safe Mode to troubleshoot issues with themes and plugins)

ご提案ありがとうございます。不思議なことに、セーフモードで3つのオプションをすべて有効にしても、エラーは解消されませんでした:

さらにデバッグを進めても行き詰まりが続いています。このことから、「セーフモード」が JS を完全に無効化していないのではないかと疑っています。テストのために JS の機能をさらに完全に排除するための別の手順はありますか?

あなたのサイトは一般公開されていますか?もしそうなら、リンクを共有していただけませんか?(公開したくない場合は、プライベートメッセージでも構いません)

リンクをありがとうございます、@mreach。こちらからは明らかな問題は見当たりません。

サイト上の1人のユーザーにのみ影響があると伺いましたが、これは特定のブラウザやデバイスに限定された問題でしょうか?それとも、別のデバイスからログインしても同じ現象が起きるのでしょうか?

特定のブラウザやデバイスでのみ発生する場合、ブラウザのプラグイン(例:広告ブロッカー)が Discourse のコードに干渉している可能性があります。

すべてのブラウザで発生している場合は、より対処が複雑になります。フォーラムにサードパーティ製のプラグインはインストールされていますか?また、そのユーザーが設定している「デフォルトのホームページ」が何であるかも(Discourse の「インターフェース」設定で確認できます)興味深い情報です。

ありがとうございます。はい、私もほぼ同じ考えを持っていました。ユーザーにはすべての拡張機能を無効にし、ブラウザのデータをすべてクリアするよう指示しました。すると、また別のユーザーから同じ問題の報告が寄せられました… 両方とも Chrome を使用しています。Firefox と Brave で試すよう依頼すると、どちらもそこでは問題なく動作すると回答しましたが、何をやっても Chrome が再び「正常に」動作しないようです。さらにインシognitoモードの結果について再度確認したところ、両者ともインシognitoモードでは動作すると報告しました。これらすべては最後の Discourse アップデート後の出来事であり、何かしらの JS 上の問題でクリアされていないのではないかと思われます… しかし、それがどのようにして起こり得るのか、私には全く理解できません。

ホームページとして何を設定しているか聞いてみました。結果をお知らせします。それはとても良いアイデアで、私の頭には全く浮かびませんでした…

「いいね!」 1

なるほど、興味深いですが決定的な結論には至りません:

問題を抱えているユーザーは、ホームを「カテゴリ」に設定しています:
image

これを「最新」など他のものに変更すると、サイトロゴをクリックするか、ブラウザの「戻る」矢印を使用することで、ホームページを読み込めるようになります。しかし、再度「最新」から「カテゴリ」に戻すと、問題/エラーが再発します。:weary_face:

このユーザーは管理者でもあります。右上のハンバーガーアイコンをクリックし、「管理」を選択すると、ホームページを「カテゴリ」から「最新」に変更していても、上記で報告されたエラーが発生します。

もちろんこれは新しい情報ですが、私の視点からすると、必ずしも役立つとは限りませんね。ふむ。

「いいね!」 1

これらのエラーについて、もう少し詳しい情報を取得することはできますか?これらはすべて展開可能であり、エラーの詳細をもう少し含んでいるはずです。

彼らは以下のコンソール出力を私に提供してくれました:https://pastebin.com/LuDHesyQ

これまでのご提案、改めてありがとうございます。@david さん、何かご意見はありますか?

「いいね!」 1

残念ながら、これらのログは比較的一般的で、実際の原因についてはあまり示していません。

最も興味深いログは、上記で共有いただいたスクリーンショットの一番上に表示されているもので、Pastebin の最後のエントリでもあります。

domainname.com/:1 Uncaught (in promise) {readyState: 4, getResponseHeader: ƒ, getAllResponseHeaders: ƒ, setRequestHeader: ƒ, overrideMimeType: ƒ, …}

ここにある ... の中身がわかると役立つかもしれません。ログの左側にある小さな三角形をクリックすると、さらに詳細な情報が展開されます。その部分のコピー&ペースト、あるいはスクリーンショットを提供していただけると助かります。

また、別にサーバー側のエラー(/logs 画面)が表示されていませんか?Discourse の最新バージョンを実行されていますか?

はい、最新バージョンを実行しています。エラー発生時のログを確認しましたが、本番環境でもそれ以外でも何も表示されていません…

ふむ、その行でオブジェクトのコピーを実行したところ、以下のような結果が得られました:

{
    "readyState": 4,
    "responseText": "<!doctype html>\n<html lang=\"en\">\n    <head>\n        <meta charset=\"utf-8\">\n        <meta http-equiv=\"refresh\" content=\"30\">\n        <title>domainname.com メンテナンス中</title>\n        <style>\n            html {\n                background: #3d4147;\n            }\n            .center {\n                display: flex;\n                justify-content: center;\n            }\n            .container {\n                background: #717984;\n                max-width: 500px;\n                padding: 5px 50px 30px 50px;\n                margin-top: 20px;\n            }\n            .title {\n                padding-top: 20px;\n            }\n            h1, p {\n                font-family: \"Helvetica Neue\",Helvetica,Arial,sans-serif;\n            }\n            @keyframes spin {\n                from { transform: rotate(0deg); }\n                to { transform: rotate(360deg); }\n            }\n            .spinner {\n                animation: spin 10s infinite linear;\n                height: 75px;\n                width: 75px;\n                border: 7px solid #555555;\n                border-right-color: transparent;\n                border-radius: 50%;\n                margin-top: 20px;\n            }\n        </style>\n    </head>\n    <body>\n                <div class=\"center\">\n                    <img src=\"/err/site.png\" alt=\"サイトロゴ画像\" width=\"512\" height=\"171\">\n                </div>\n        <div class=\"center\">\n            <div class=\"container\">\n                <center>\n                  <h1 class=\"title\">一時的にメンテナンス中です…</h1>\n                </center>\n\n                <div class=\"center\">\n                    <img src=\"/err/error.png\" alt=\"メンテナンス画像\" width=\"150\" height=\"152\">\n                </div>\n\n                <center>\n                  <p>domainname.com は現在メンテナンス中です。サイトのアップグレードまたは定期メンテナンスを実施しています。</p>\n                  <p>ご不便をおかけしますが、システムが利用可能になったら自動的にこのページをリフレッシュするように設定しています!</p>\n                  <p>ご辛抱いただき、誠にありがとうございます。</p>\n                </center>\n\n                <div class=\"center\">\n                    <div class=\"spinner\"></div>\n                </div>\n            </div>\n        </div>\n    </body>\n</html>\n",
    "status": 200,
    "statusText": "parsererror"
}

また、コンソールからのスクリーンショットは以下の通りです:

@david それがおっしゃりたいことですか?正しい結果を捉えられたことを願っています。

Discourse をプロキシの背後で運用されていますか?このメンテナンスメッセージは Discourse 自体から発せられているものではないと思います :thinking:

これは、サイトがメンテナンス中(アップグレードや Docker アップデートなど)の間にレンダリングされるエラーページの仕組みです。

エラー発生時に意図的なメンテナンスが行われていなかったと推測されますが、その場合、プロキシの実装または設定に問題があるはずです。それを排除するために、ポート 80/443 に Discourse を直接公開することは可能ですか?(当社の標準的なインストール手順に従って)

もちろん、Discourse 側のエラーがプロキシにこのメッセージを表示させている可能性もあります。しかし、Discourse が何を返していたか分からない限り、その診断は困難です。プロキシがアップストリームの Discourse 応答のログを保持していないでしょうか?