Problem mit admin_detailed_user_serializer

Hallo,

Ich habe ein Problem mit dem admin_detailed_user_serializer, das 500-Fehler verursacht, wenn ein Administrator versucht, einen Benutzer über die Benutzersuche anzuzeigen. Der 500-Fehler tritt auch auf, wenn GET-API-Aufrufe an https://mycommunity/admin/users/2000020409.json gemacht werden. Unten finden Sie die Ausnahme aus den Protokollen. Etwa 50 % der Benutzer haben diesen Fehler. Ich habe versucht, funktionierende und nicht funktionierende Benutzer in der Datenbank zu vergleichen, aber ich kann das Problem nicht herausfinden. Ich vermute, dass etwas, das ich während einer Benutzerwanderung von einem anderen System getan habe, dieses Problem verursacht hat.

Unten sind meine Datensicherungsschritte aufgeführt:

  1. Manuell Daten in die Tabellen users, user_profiles, user_emails und user_stats eingefügt.
  2. Anfangs hatten alle Benutzer eine E-Mail-Adresse ‘someid@example.com’.
  3. Ich habe dann die Tabelle user_email für den Benutzer aktualisiert, um die richtige E-Mail-Adresse zu haben.
  4. Nach diesem Punkt habe ich festgestellt, dass 50 % dieser Benutzer nicht aus der Admin-Benutzerliste angezeigt werden können. Wenn Sie jedoch mit der rechten Maustaste auf ihren Namen in der Profiliste klicken, um die Profilkarte aufzurufen, können Sie hineinklicken und das Profil problemlos aufrufen. Sie können Aktualisierungen im Profil vornehmen, aber wenn Sie versuchen, jemanden zum Administrator zu machen, erhalten Sie denselben 500-Fehler, den ich unten aufgeführt habe.

Weiß jemand, was dieser Code überprüft? Ich vermute, dass einigen Benutzern ein entscheidendes Datenelement fehlt, das diese 500-Ausnahme verursacht. Hat jemand Vermutungen? Ich bin neu bei Discourse und jeder Rat wäre sehr willkommen.

Vielen Dank!


app/serializers/admin_user_list_serializer.rb:95:in `time_read'
(eval):27:in `_fast_attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:468:in `rescue in attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:455:in `attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:89:in `block in _serializable_array'
activerecord (7.0.4.3) lib/active_record/relation/delegation.rb:88:in `each'
activerecord (7.0.4.3) lib/active_record/relation/delegation.rb:88:in `each'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:79:in `map'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:79:in `_serializable_array'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:73:in `serializable_array'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:53:in `as_json'
app/serializers/admin_detailed_user_serializer.rb:166:in `similar_users'
(eval):72:in `_fast_attributes'
active_model_serializers (0.8.4

Das ist wahrscheinlich nicht hilfreich, aber hier scheint das Problem angefangen zu haben. Es wäre viel besser gewesen, diese Benutzer mit Rails zu erstellen, damit alle Prüfungen der Daten bei der Erstellung von Benutzern durchgeführt werden könnten.

Vielleicht ist das der Schritt, bei dem Sie die Dinge kaputt gemacht haben.

Ist diese Seite live oder eine Testseite, auf der Sie neu anfangen können? Es ist viel einfacher, Dinge nicht kaputt zu machen, als zu versuchen herauszufinden, was kaputt ist und wie man es repariert.

active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:53:in as_json' app/serializers/admin_detailed_user_serializer.rb:166:in similar_users’
(eval):72:in `_fast_attributes’

Vielleicht bedeutet das, dass Sie Benutzer mit doppelten E-Mail-Adressen haben?

Bearbeitung: Ich glaube nicht, dass es das ist.

Ich empfehle Ihnen, sich discourse/script/import_scripts at main · discourse/discourse · GitHub anzusehen und ein Skript als Basis für Ihres zu verwenden und ein solches Skript zur Datenimporte zu nutzen. Es sei denn, Sie haben ein tiefes Verständnis von Rails und Discourse, dann ist das direkte Hantieren mit der Datenbank ein Rezept für eine Katastrophe.

1 „Gefällt mir“

Vielen Dank für die Antwort, ich weiß sie zu schätzen. Da es sich hierbei um eine Live-Produktionsseite handelt, suche ich nach Alternativen, anstatt neu anzufangen. Mir ist aufgefallen, dass das Profil eines Benutzers nach der Anmeldung behoben ist und die Fehlermeldung 500 verschwindet. Ich versuche also herauszufinden, was während des Anmeldevorgangs passiert, das den Benutzer behebt.

1 „Gefällt mir“

Ist es das? Und durch das Einloggen fügen sie einen Wert zu time_read hinzu?

2 „Gefällt mir“

Gute Arbeit, @JammyDodger! Das ist bestimmt der richtige Weg!

Eine weitere Sache, nach der Sie Ausschau halten sollten, ist eine ensure_consistency-Methode im Benutzer-Modell. Sie könnten im Quellcode nachsehen oder es einfach versuchen:

u=User.find(123)
u. ensure_consistency! 

Oder vielleicht ohne das !

2 „Gefällt mir“