Eu consegui resolver
Parece que eles atualizaram o código para realmente lançar um erro se nenhum usuário for encontrado, então tive que usar rescue em vez de comparar com nil?
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
Além disso, a resposta mudou de
resp['body']['user']
para
resp.response.env.body['user']
Meu último problema restante é que, quando chamo client.sync_sso, recebo um erro interno do servidor 500 agora
Os logs mostram
ActiveRecord::RecordNotUnique (PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "user_emails_pkey")
No entanto, se eu usar os mesmos detalhes no terminal do Rails e executar client.sync_sso, ele funciona perfeitamente
Apenas para informação, eu não mudei o endpoint para que as partes acima voltassem a funcionar, então parece que /users/by-external/ ainda é válido