إزالة جميع المستخدمين باستثناء المسؤولين أو عدد قليل من المستخدمين المختارين أيهما أسهل

هل يوجد سكربت سريع يسمح لي بإزالة جميع المستخدمين دفعة واحدة باستثناء المسؤولين أو عدد قليل من المستخدمين المحددين بمعرفاتهم/رسائل البريد الإلكتروني الخاصة بهم؟ أي خيار أسهل مقبول.

أرغب في القيام بذلك من وحدة تحكم Rails.

شكرا

 User.where(admin: false).destroy_all

أعتقد أن هذا سيفي بالغرض. يمكنك تنفيذ ما سبق بدون destroy_all لرؤية المستخدمين الذين تم تحديدهم.

إعجابَين (2)

شكراً، هل destroy_all هو نفس UserDestroyer أم أن أحدهما مفضل عن الآخر. رأيت UserDestroyer مذكوراً عدة مرات في منشورات أخرى. شكراً

إنه يفشل الآن بهذا بعد حذف حوالي 200، ولكنه عالق الآن:

ActiveRecord::RecordInvalid: Validation failed: Primary email can't be blank
from /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3/lib/active_record/validations.rb:80:in `raise_validation_error'

لقد بحثت ووجدت منشورًا واحدًا حول التحقق من رسائل البريد الإلكتروني المحظورة في المسؤول > السجلات > رسائل البريد الإلكتروني المفحوصة ولا يظهر شيء، ولكني لست متأكدًا مما يجب فعله بعد ذلك. شكرًا

يجب عليك استخدام UserDestroyer. سيؤدي ذلك إلى حذف البيانات الأخرى المرتبطة بالمستخدم.

لا أعرف لماذا حصلت على هذا الخطأ.

قد تحتاج إلى استعادة النسخة الاحتياطية الخاصة بك إلى ما قبل بدء الحذف وتجربة الـ destroyer بدلاً من ذلك.

إعجاب واحد (1)

لقد قمت باستعادة وحاولت مرة أخرى باستخدام UserDestroyer، ولكن ما زلت أحصل على هذا الخطأ. هل هناك طريقة لتتبع ما يسببه؟

يمكنك استخدام نص برمجي لـ Rails أو مستكشف البيانات للتحقق من عناوين البريد الإلكتروني ومعرفة ما إذا كان أحدها فارغًا… على الرغم من أن ذلك سيكون غريبًا. لا يوجد حقل بريد إلكتروني فارغ بشكل افتراضي حتى للحسابات التي تم إنشاؤها تلقائيًا مثل discobot أو system (وهما مسؤولان افتراضيًا).

هل تم استيراد المستخدمين لديك؟ ولكن حتى في هذه الحالة، أنا متأكد من أن طرق إنشاء الحساب لا تسمح بحقول بريد إلكتروني فارغة.

لقد استخدمنا oauth مع تطبيق مخصص. فعلت هذا بالأمس ولكنه لم يُرجع أي مستخدمين:

User.joins(:user_emails).where(user_emails.email = \"\") وهذا أعاد nil لذلك لا أعتقد أن أيًا منها فارغ.

يجب أن يكون هناك مستخدم واحد أو اثنان فقط على الرغم من أن الغالبية تعمل ولكنها تتعثر على الفور على نفس المستخدم الآن.

برنامج الحذف الخاص بي هو:

User.where(admin: false).find_each do |user| UserDestroyer.new(Discourse.system_user).destroy(user, delete_posts: true) end

هل هناك أي طريقة لعرض المستخدم الذي يتم معالجته أثناء التكرار؟

يمكنك إخراج أسماء المستخدمين ورسائل البريد الإلكتروني المقابلة لهم:

User.where(admin: false).find_each do |user|
  puts "#{user.username}: #{user.email}"
  UserDestroyer.new(Discourse.system_user).destroy(user, delete_posts: true)
end
3 إعجابات

شكراً، هذا رائع، سأقوم بتشغيل هذا الآن ونأمل أن يخبرني بمن يواجه صعوبة.

إعجاب واحد (1)

نعم، نجح هذا، وأظهر لي ما كان يعاني منه وكان حرفًا غير قانوني في البريد الإلكتروني بطريقة ما، لذا قمت بتحديثه وعمل. شكرًا

3 إعجابات

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.