사실 문제를 해결했습니다.
사용자를 찾을 수 없으면 실제로 에러를 발생시키도록 코드가 업데이트된 것 같습니다. 그래서 nil?과 비교하는 대신 rescue를 사용해야 했습니다.
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
또한 응답 형식이
resp['body']['user']
에서
resp.response.env.body['user']
로 변경되었습니다.
남은 마지막 문제는 client.sync_sso를 호출할 때 이제 Internal server error 500이 발생한다는 것입니다.
로그에는 다음과 같은 내용이 표시됩니다.
ActiveRecord::RecordNotUnique (PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "user_emails_pkey"
하지만 rails 터미널에서 완전히 동일한 세부 정보를 사용하여 client.sync_sso를 실행하면 완벽하게 정상적으로 동작합니다.
참고로 위 부분이 다시 작동하도록 엔드포인트를 변경하지 않았으므로 /users/by-external/이 여전히 유효한 것 같습니다.