特定のユーザーが作成したトピックを削除しようとすると、502エラーが発生します

管理パネルのユーザーから特定のユーザーが作成したトピックを削除しようとすると、502エラーが表示されます。


特定のユーザーが作成したトピックを削除する他の方法はありますか?

Hi @Yogesh_g

このユーザーが作成した301,719件すべての投稿を削除しようとしていますか? :grimacing: それでは、投稿が欠落しているため、意味をなさなくなるトピックがたくさん残ってしまうのではないでしょうか。

このような状況では、ユーザーを匿名化することは理にかなっていますか?

「投稿の全削除最大数」の設定が原因で、この502エラーが発生しているのだと思います。

「いいね!」 3

I have increased the limit to greater than the number I want to delete and These topics only contains posts by the same user.

Can you please explain how anonymizing users works, would it make all posts hidden for all other users?

Is there any way I can access the database I am using discourse hosting ?

削除したい数よりも大きい制限値を設定しました。これらのトピックには、同じユーザーの投稿のみが含まれています。

ユーザーの匿名化はどのように機能するか説明していただけますか?すべてのユーザーにとってすべての投稿が非表示になりますか?

Discourseホスティングで使用しているデータベースにアクセスする方法はありますか?

いいえ、投稿は非表示になりませんが、ユーザー名は削除されます。ユーザーがアカウントの削除を要求した場合に、コンテンツを保持し、コミュニティのトピックをそのまま維持しながら、そのコンテンツを匿名化して誰が書いたかわからないようにするため、時折良い解決策となります。詳細については、こちらで説明されています。

ホストされているサイトをお持ちの場合は、Discourseチームに支援を依頼するのが最善かもしれません。

「いいね!」 3

これは非常にユニークな状況であり、大量の[database]作業です。リクエストがタイムアウトするのも無理はありません。

非常に例外的な状況ですね。ホスティングサポートに連絡して支援を求めることもお勧めします。

「いいね!」 3

承知いたしました。サポートに連絡し、こちらで皆さんに更新情報をお伝えします。

ユーザーの投稿をすべて削除する他の方法はありますか。または、データベースから投稿を削除するカスタムプラグインを作成することはできますか。(クライアントがそれを求めていますが、Discourseにはすでに機能があるため、大量の投稿に対して機能するかどうかはわかりません)。

プラグインを作成すべきですか、それとも作成しないべきですか。もし作成する場合、どのように機能しますか。

@Michael Brown @southpaw ユーザーを指定された数で一括削除するプラグインを作成しました。投稿を削除するためにRubyコードを記述しました。現在、管理者の入力を受け取るために設定APIを使用しています。

直面している課題は次のとおりです。プラグインの管理ページを作成したいのですが、そこにはいくつかの入力フィールドとボタンがあります。そのボタンをクリックしたときにRubyコードを実行したいのです。

いくつかの方法を試しましたが、失敗しました。

Discourseでこれを達成する方法はありますか?

Hi @Yogesh_g

:open_mouth:

私はまだプラグイン作成の経験がないため、管理ページを機能させるための質問についてすぐにお答えすることはできませんが、必要なサポートを受けられていることを確認したいと思います。

ここで情報を整理するのに少し苦労しているので、詳細をお伺いするためにダイレクトメッセージをお送りしました。

How to execute server-side code when clicking a button? で継続

こんにちは、Discourseコミュニティの@pfaffman @merefield様

特定のユーザー(合計301,719件の投稿)が作成したすべての投稿を削除する必要があります。いくつかの方法を試しましたが、削除に失敗しました。

そのユーザーのすべての投稿を削除するにはどうすればよいですか?方法を教えてください。3ヶ月間苦労しています。

完全削除のことですか、それともソフト削除のことですか?

恒久的な削除。これらの投稿はどのユーザーにも表示されたくありません。

このトピックは役に立ちますか?

あなたが求めているものと正確には一致しないかもしれませんが、必要に応じて修正できるかもしれません。

これは機能しません。以前に試しました。

「いいね!」 1

以前にも似たような問題がありました。多くの条件を持つさまざまなユーザーから約200,000件の投稿を削除する必要がありました。通常の СУЩЕСТВУЮЩИЙ 方法では、長期的な遅延が発生します。

最終的に、私は最も単純な方法を取りました。投稿IDが最大になるまで1からループします。条件を満たせば、それを削除します。それら(約900,000件の投稿)を反復処理するのに約1時間かかりました。

「いいね!」 2

サーバーでタイムアウトエラーが発生しました。以下にコードを示します。

# frozen_string_literal: true

module Jobs
  class DeleteUserPosts < ::Jobs::Scheduled
    every 2.minutes

    def execute(args)
      return unless SiteSetting.delete_user_topics_enabled?

      username = SiteSetting.delete_posts_for_username
      posts_per_batch = SiteSetting.delete_posts_in_single_batch.to_i

      return unless username.present? && posts_per_batch.positive?

      user = User.find_by(username: username)
      return unless user.present?

      posts = user.posts.order(created_at: :asc)

      deleted_count = 0
      posts.each do |post|
        break if deleted_count >= posts_per_batch

        if SiteSetting.delete_user_topics_dry_run?
          Rails.logger.error("DeleteUserPosts would remove Post ID #{post.id} (#{post.topic.title} - #{post.excerpt}) (dry run mode)")
        else
          Rails.logger.error("DeleteUserPosts removing Post ID #{post.id} (#{post.topic.title} - #{post.excerpt})")
          begin
            PostDestroyer.new(Discourse.system_user, post).destroy
            deleted_count += 1
          rescue StandardError => e
            Rails.logger.error("Error deleting post ID #{post.id}: #{e.message}")
          end
        end
      end

      # Cancel the scheduled job if there are no more posts remaining
      if posts.size <= posts_per_batch
        self.class.cancel_scheduled_job
      end
    end
  end
end

これは明らかに間違った方向に行く可能性があります。300,000件の投稿は少なくない数であり、一度にメモリに読み込むことはできません。

「いいね!」 1

使用したコードスニペットを共有していただけますか、または例を示していただけますか?