管理者サイドバーが表示されなくなりました

こんにちは、皆様。

約2週間前から、管理画面の左側のサイドバーが表示されなくなりました(スクリーンショット参照)。設定や他の場所を探しても、それを「有効化」する方法が見つかりません。シークレットモードのブラウザでも同じ症状が現れます。
この問題の原因について、何かアイデアをお持ちの方はいませんか?

どうぞよろしくお願いいたします
Mr. Xurrent

フォーラムへようこそ :wave:

セーフモードを試しては?プラグインやコンポーネントが原因である可能性を除外できますよ。
また、ブラウザのコンソールにエラーメッセージがないか確認してみるのもいいかもしれません。

こんにちは、こんにちは。

たまたま今ちょうど試してみたのですが、「セーフモード」では管理者サイドバーが表示されています。
このエラーを引き起こしている可能性のあるプラグインやコンポーネントについて、教えていただけますか?

トラブルの原因を特定するために、まずはセーフモードでプラグインのみを無効化し、次にテーマのみを無効化してみてください。これで、どこを調べればよいか大体見当がつきます。

基本的には、両方とも管理画面のサイドバーにあります。今ではサイドバーが再び表示できるようになっているはずです。プラグインは独立したセクションとして配置されています。また、フォーラムのURLの末尾に /admin/plugins を追加することもできます。テーマは「外観」セクション、または /admin/config/customize/themes で確認できます。

おそらく、これはあなたのフォーラム固有のカスタマイズによるものではないでしょうか。これまで、このような問題を抱えている他のフォーラムについては聞いたことがありません。Discourseチームが開発していないプラグインがどれを使用しているか、また、どのテーマコンポーネントや独自のカスタマイズを行っているか分からない限り、原因を推測するのは難しいでしょう。

「いいね!」 1

Discourse チームによって公開されたプラグインのみが有効化されていました。
すべてのプラグインを無効化しましたが、問題状態は依旧です。

テーマとして「Foundation」テーマが使用されています。どのテーマでプレビューを表示しても、左側の管理サイドバーがどこでも欠落しています。

コンポーネントはインストールされていません。

セーフモードの各種オプションを使って、テーマの問題かプラグインの問題か切り分けましたか?

先ほどテストしました。
「非推奨の JavaScript 関数をエラーとして処理する」オプションのみを有効にしても、「セーフモード」で同様のエラー状態が発生します。

ブラウザのコンソールでエラーを確認しましたか?

「いいね!」 1

それは私にとって驚きではありません。プラグインもテーマも無効化されていないからです。しかし、それがテーマかプラグインのどちらが問題の原因かを明確にはしていません。

テーマのみを無効化すると、サイドバーは正常に動作しますか?

その場合、プラグインを原因として除外できます。そうでない場合は、非公式のプラグインを体系的に無効化していくことをお勧めします。

それでも改善しない場合は、第3のオプションのみを試すことになります。

この種の問題に対処するには、これで十分でしょうか? それとも、各ラウンドごとに再構築が必要でしょうか?

それが私が以前述べたことの意味です。
つまり、まず一つ目として、すべてのプラグインを順次無効化しましたが(エラー状況は変化しませんでした)、また、上の三つのオプションのいずれかを無効化しても、「セーフモード」では管理画面の左サイドバーが表示されます。

「廃止予定のJavaScript関数がエラーを発生させる」オプションを有効にすると、「セーフモード」では管理画面の左サイドバーがもう表示されなくなります。

ふーむ。これは珍しいですね。本来はどちらか一方になることを期待していました。つまり、これはプラグインとテーマの相互作用に問題があるか、あるいはそのどちらでもないかのいずれかです。
今、ブラウザのコンソールが本当に役に立つはずです。

そこで2つのエラーが表示されます:

  1. admin-sidebar.js:378 Uncaught (in promise) TypeError: n.admin_config_login_routes.map is not a function
  2. api-sections.gjs:23 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading ‘map’)

「いいね!」 1

素晴らしい!問題が発生しているコードの行を確認できます。

このコードが問題の解決策のようです Changing the target audience of Enable form templates incorrectly creates an Update Discourse option in the left sidebar - #2 by zogstrip

「いいね!」 1

そこに記載されているエラーは、私の状況と一致しません。
また、その投稿から、どう修正すれば再び正常に動作するのかがよく分かりません :sweat_smile:。

あなたの問題は、リンクされた問題を解決するために施された変更によるものだと推測します。ここであなたが変更できるかどうかはわかりません。コードに詳しい人が早く時間を取ってこれを調べてくれることを願っています。

「いいね!」 1

こんにちは @Mr.Xurrent。ローカル環境で再現を試みていますが、プラグインの設定方法に関わらず再現できていません。チーム製のプラグインのみが有効化されているとおっしゃっていましたが、無効化されている他のプラグインがインストールされていますか?

エラーが発生している際に、以下のコードをコンソールで実行し、結果をここに貼り付けてみてください:

(() => {
  const raw = JSON.parse(
    JSON.parse(document.querySelector("#data-preloaded").textContent).site
  ).admin_config_login_routes;

  const live = Discourse.__container__
    .lookup("service:site")
    .admin_config_login_routes;

  return {
    raw,
    rawType: typeof raw,
    rawConstructor: raw?.constructor?.name,
    rawIsArray: Array.isArray(raw),

    live,
    liveType: typeof live,
    liveConstructor: live?.constructor?.name,
    liveIsArray: Array.isArray(live),
    liveHasMap: typeof live?.map === "function",

    arrayPrototypeHasMap: typeof Array.prototype.map === "function",
  };
})()

現時点では、admin_config_login_routes の値が map を許可しない状態になる理由が本当に分かりません。サーバー側で LOAD_PLUGINS=0 を設定してすべてのプラグインを無効化すると、空の配列が返されます。他のすべてのケースでは、値の配列が返されます。どちらの場合も map は正常に動作しますが、配列外に {} や "oauth2" のような値がある場合、エラーが発生します。

「いいね!」 1

こんにちは @tannerabread さん、

はい、Discourse 自体によって公開されたプラグインのみが有効になっており、他のプラグインはインストールされていませんでした。

ご指摘いただいたテキストブロックをブラウザのコンソールに入力しましたが、変化はなく、コンソールからのフィードバックも一切ありませんでした。

「OAuth2」プラグインは、どの時点でも有効化されていませんでした。

明確にするために言うと、そのコードブロックで何か変化があることを期待していたわけではありません — しかし、値が null や undefined であったとしても、何らかの出力があることを期待していました。

さらに少し補足すると、サーバーを LOAD_PLUGINS=0 で起動してすべてのプラグインを明示的にアンロードしない限り、プラグインの有効/無効は admin_config_login_routes に含まれるかどうかには影響しないはずです。


実行を依頼したコンソールブロックでは、admin_config_login_routes の値(または値の欠如)を確認できることを期待していました。それが空であることはあり得ないはずで、たとえ空の配列であっても map 関数は動作するはずです。

これらは主に私の考えですが、これを解決する方法についてさらに検討します。あなたが公式の Discourse プラグインしか使用していないと言ったとしても、あなたのセットアップのより多くの詳細を見られると良いですね。

良い質問は、インストールしているプラグインがすべてコアの Discourse に同梱されているデフォルトのものなのか、それとも Discourse からの追加のプラグインもインストールしているのか、ということです。

「いいね!」 1