He estado actualizando mis foros de 1.6 a 3.1, lo que ha implicado moverme a un nuevo servidor y restaurar la copia de seguridad, luego volver a conectar todo.
Usamos SSO para iniciar sesión en ambos, lo cual todavía funciona.
Sin embargo, Discourse ahora parece lanzar errores en algunas áreas aleatorias que están causando un problema con la creación de cuentas desde el sitio web utilizando la API.
Estábamos usando el gem de ruby discourse_api en la versión 0.10.1, que actualicé a 0.48.1.
El error ocurre en DiscourseApiService.new.user(self)
lo que llama a resp = client.get("/users/by-external/#{user.id}")
lo que lanza el error {"errors"=>["No se pudo encontrar la URL o el recurso solicitado."], "error_type"=>"not_found"}
Esto solía funcionar bien, pero ahora, por alguna razón, no se puede encontrar la URL.
Intenté degradar el gem discourse_api a 0.10.1 nuevamente, que es lo que estábamos ejecutando anteriormente, y funciona después de la etapa client.get, pero en su lugar falla en la siguiente llamada con el mismo error.
client.sync_sso(
{"errors"=>["No se pudo encontrar la URL o el recurso solicitado."], "error_type"=>"not_found"}
Parece que actualizaron el código para lanzar un error si no se encuentra ningún usuario, así que tuve que usar rescue en lugar de comparar si era 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
Además, la respuesta ha cambiado de resp['body']['user']
a resp.response.env.body['user']
Mi último problema pendiente es que cuando llamo a client.sync_sso, ahora obtengo un error interno del servidor 500.
Los registros muestran ActiveRecord::RecordNotUnique (PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "user_emails_pkey")
Sin embargo, si uso los mismos detalles en la terminal de Rails y ejecuto client.sync_sso, funciona perfectamente.
Solo para que lo sepas, no cambié el endpoint para que las partes anteriores volvieran a funcionar, así que parece que /users/by-external/ sigue siendo válido.