Ich konnte es tatsächlich lösen.
Anscheinend haben sie den Code aktualisiert, um tatsächlich einen Fehler auszulösen, wenn kein Benutzer gefunden wird. Ich musste also rescue anstelle von compare if nil verwenden?
begin
resp = client.get("/users/by-external/#{user.id}")
rescue DiscourseApi::NotFoundError => error
puts error.response.body['errors'].first
sync_user(user)
else
resp.response.env.body['user']
end
Außerdem hat sich die Antwort von
resp['body']['user']
zu
resp.response.env.body['user']
geändert.
Mein letztes verbleibendes Problem ist, dass ich jetzt einen internen Serverfehler 500 bekomme, wenn ich client.sync_sso aufrufe.
Die Protokolle zeigen
ActiveRecord::RecordNotUnique (PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "user_emails_pkey"
Wenn ich jedoch die exakt gleichen Details im Rails-Terminal verwende und client.sync_sso ausführe, funktioniert es einwandfrei.
Nur zur Information: Ich habe den Endpunkt für die obigen Teile nicht geändert, damit sie wieder funktionieren. Es scheint also, dass /users/by-external/ immer noch gültig ist.