الحصول على /users/by-external/ يرمي خطأ URL غير موجود بعد التحديث

لقد كنت أقوم بتحديث منتدياتي من 1.6 إلى 3.1، والذي تضمن الانتقال إلى خادم جديد واستعادة النسخ الاحتياطي ثم إعادة توصيل كل شيء معًا.

نحن نستخدم SSO لتسجيل الدخول إلى كليهما، والذي لا يزال يعمل.

ومع ذلك، يبدو أن Discourse الآن يرمي أخطاء في بعض المناطق العشوائية التي تسبب مشكلة في إنشاء الحسابات من موقع الويب باستخدام API.
كنا نستخدم gem ruby discourse_api بالإصدار 0.10.1، والذي قمت بتحديثه إلى 0.48.1.

يأتي الخطأ عند
DiscourseApiService.new.user(self)

والذي يستدعي
resp = client.get("/users/by-external/#{user.id}")

والذي يرمي الخطأ
{"errors"=>["The requested URL or resource could not be found."], "error_type"=>"not_found"}

لقد كان هذا يعمل بشكل جيد من قبل، ولكن الآن لسبب ما لا يمكن العثور على عنوان URL.
حاولت خفض إصدار gem discourse_api إلى 0.10.1 مرة أخرى، وهو ما كنا نعمل به سابقًا، ويتجاوز مرحلة client.get بنجاح ولكنه يفشل بدلاً من ذلك في المكالمة التالية بنفس الخطأ.

client.sync_sso(

{"errors"=>["The requested URL or resource could not be found."], "error_type"=>"not_found"}

تغير نقطة النهاية إلى /u/by-external/{external_id}.json في وقت ما. ويتطلب مفتاح واجهة برمجة تطبيقات واسم مستخدم لنقطة النهاية هذه.

إعجاب واحد (1)

تمكنت بالفعل من حلها

يبدو أنهم قاموا بتحديث الكود لرمي خطأ فعليًا إذا لم يتم العثور على مستخدم، لذلك كان عليّ استعادة الخطأ بدلاً من المقارنة إذا كان فارغًا؟

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، أحصل على خطأ داخلي في الخادم 500 الآن

تظهر السجلات
ActiveRecord::RecordNotUnique (PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "user_emails_pkey"

ومع ذلك، إذا استخدمت نفس التفاصيل بالضبط في طرفية Rails وقمت بتشغيل client.sync_sso، فإنها تعمل بشكل مثالي

فقط للعلم، لم أقم بتغيير نقطة النهاية للأجزاء المذكورة أعلاه لتعمل مرة أخرى، لذلك يبدو أن /users/by-external/ لا يزال صالحًا

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.