ステージング/本番のDockerセットアップでユーザー削除機能が動作しなくなりましたが、ローカル(Dockerセットアップなし)では動作します

皆さん、こんにちは。

ユーザーを削除する二次ウィンドウ(実際にユーザーを削除するウィンドウ)が、ステージング/本番環境(Dockerセットアップ)に表示されず、ローカル環境(Dockerセットアップなし)では正常に動作するという問題が発生しています。


削除ボタンを押しても何も起こりません。ローカル環境では、「削除中…」と表示され、ユーザーが削除されます。

数週間前から動作しなくなりました。昨年12月にはユーザーを削除するために使用していました。

「いいね!」 1

Stephanさん、こんにちは:wave:

Discourseのバージョンを教えていただけますか?

ブラウザの開発者ツールのコンソールにエラーはありますか?

Discourse管理パネルのログにエラーはありますか?

「いいね!」 1

どこにも何もありません。コードが呼び出されていないようです。ローカルで確認し、デバッグしましたが、すべて正常に動作しました。本当に奇妙です。

インストール済み

2.5.0.beta7

( 2a17124a5b )

2.5はもう古く、約2年半前のもので、Discourseはちょうど3.0に達しました。

アップグレードしない理由があれば教えてください。

「いいね!」 3

ええ、非常にたくさんあります :slight_smile:

すべてのロジックを実行するカスタムプラグインがあり、Discourse はデータストレージと基本的な承認および認証の処理のみを行うツールとして使用しています。モバイルアプリ(カスタムフロー)での支払い検証やソーシャルログインなどを処理するモバイルファーストAPIを実行しており、他にも高度な機能があります :slight_smile:

私の問題は、Discourse のセットアップ全体やバージョンに関するものではありません。3年間正常に動作しており、厳密な依存関係がないため、今後数年間も動作し続けるでしょう。専用サーバーでホストしています。

アクションを押しても何も起こらない理由を見つける方法を誰かに教えてほしいのです。私の見解では、すべて JavaScript です。

destroy(opts) {
    const user = this;
    const message = I18n.t("admin.user.delete_confirm");
    const location = document.location.pathname;

    const performDestroy = function(block) {
      bootbox.dialog(I18n.t("admin.user.deleting_user"));
      let formData = { context: location };
      if (block) {
        formData["block_email"] = true;
        formData["block_urls"] = true;
        formData["block_ip"] = true;
      }
      if (opts && opts.deletePosts) {
        formData["delete_posts"] = true;
      }
      return ajax(`/admin/users/${user.get("id")}.json`, {
        type: "DELETE",
        data: formData
      })
        .then(function(data) {
          if (data.deleted) {
            if (/^\\/admin\\/users\\/list\\//.test(location)) {
              document.location = location;
            } else {
              document.location = getURL("/admin/users/list/active");
            }
          } else {
            bootbox.alert(I18n.t("admin.user.delete_failed"));
            if (data.user) {
              user.setProperties(data.user);
            }
          }
        })
        .catch(function() {
          AdminUser.find(user.get("id")).then(u => user.setProperties(u));
          bootbox.alert(I18n.t("admin.user.delete_failed"));
        });
    };

    const buttons = [
      {
        label: I18n.t("composer.cancel"),
        class: "btn",
        link: true
      },
      {
        label:
          `${iconHTML("exclamation-triangle")} ` +
          I18n.t("admin.user.delete_and_block"),
        class: "btn btn-danger",
        callback: function() {
          performDestroy(true);
        }
      },
      {
        label: I18n.t("admin.user.delete_dont_block"),
        class: "btn btn-primary",
        callback: function() {
          performDestroy(false);
        }
      }
    ];

    bootbox.dialog(message, buttons, { classes: "delete-user-modal" });
  },

その特定のリリース以降のコミットを確認しましたか?

そのバージョン固有のバグである可能性があります。もしそのビルドで動作したことがあるなら、他に何が変わったのかを調査するでしょう。

そのビルドを固定してから何か更新しましたか?サードパーティのプラグインはありますか?

「いいね!」 1

いいえ、1月中旬頃に、アプリがすでに実行されている間に動作が停止しました。非常に奇妙です。

「いいね!」 1

/logs またはブラウザコンソールにエラーはありませんか?

「いいね!」 1

これは私のプラグインリストです :slight_smile:

docker_manager の人たちが最近、DEV: Resolve deprecations in upgrade-notice component (#162) · discourse/docker_manager@98205ea · GitHub で何かをして、それが数日間私のセットアップをブリックさせましたが、なんとか見つけました… でも、それがすべてです。

「いいね!」 1

Discourse のバージョンを app.yml でピン留めしましたか?

「いいね!」 1

カスタムプラグインがあるのに、プラグインリストに表示されないのはなぜですか?このインスタンスはどのようにインストールされましたか?

設定で何かを動かすのは少し難しいですね :slight_smile:

デプロイされたバージョンからバージョンを送信しました。Dockerはそのバージョンで作成され、すべてがピン留めされています。

自分で書きました :slight_smile:
コンテナのビルドと実行時にデータを取得します :slight_smile: なのでコードでのみ表示されます。

「いいね!」 1

ベースイメージが更新されるリスクはありますか? Discourse_docker は 1 月に ruby 3.1 になりましたが、古い環境のいくつかは、その変更で予測不能に動作しました。

「いいね!」 1

いいえ、コードはリポジトリ内のクローンされたブランチにリンクされており、Dockerイメージをビルドする方法では、誰も別のイメージをビルドする権限がありません。ありえません。

「いいね!」 1

約5〜6ヶ月前に最後のDockerイメージを作成しました…そして、それは私のDiscourseバージョンが新しかった頃のDockerバージョンを指していたと思います :slight_smile: 事前にすべて保存しました。 - はい、2020年6月24日 :slight_smile: \n\n参考までに:docker_managerも削除しました。何も変更されていません。

「いいね!」 1

今のところ、管理ダッシュボードに削除フローを作成することにしました。UIで何が起こるかはよくわかりませんが、DELETEエンドポイントは正常に機能し、一般ユーザー(管理者でもモデレーターでもない)では失敗しません。

どなたかこの件で手助けしていただけると助かります :slight_smile: