إنشاء الآلاف من الدعوات بكميات كبيرة

أفترض أن الإجابة هي “قصف واجهة برمجة التطبيقات بآلاف الطلبات” ولكن كنت آمل أن يكون هناك شيء أذكى.

السيناريو: لقد قمنا ببناء موقع مجتمعي لتعاونية كبيرة. هناك أكثر من 15 ألف عضو، ومن المحتمل أن 95٪ منهم لن يفتحوا مستخدمًا أبدًا و 4٪ آخرون سينشئون مستخدمًا ولكن لن يستخدموه أبدًا. إنشاء رابط واحد لـ 15 ألف دعوة يفتح الموقع أمام إساءة الاستخدام، لذا ما أريد فعله هو إنشاء حوالي 16 ألف رابط دعوة، كل منها بدعوة واحدة فقط، وستتولى أداة قوالب البريد الإلكتروني معالجتها. القيد الوحيد هو إنشاء رابط الدعوة. أريد فصل الأنظمة من أجل الخصوصية لذلك لن أقوم بتغذية 15 ألف+ عنوان إلى discourse، لذلك لن يحمل خادم discourse قائمة البريد الإلكتروني بأكملها، فقط قائمة روابط الدعوة المجهولة.

إذا كنت تعتقد أن تخزين العناوين في Discourse أكثر خطورة من أي مكان آخر تخزنها فيه هو مصدر قلق للخصوصية، فستحتاج إلى إنشائها. إذا كنت لا تحب واجهة برمجة التطبيقات (API)، يمكنك القيام بذلك من خلال Rails:

 i=Invite.generate(user, skip_email: true, max_redemptions_allowed: 1)

يعطيك مفتاح دعوة.

"/invites/#{i.invite_key}"

هو عنوان URL. يمكنك فعل شيء لكتابتها جميعًا في ملف.

4 إعجابات

هذا ما كنت أعتقده، لا يزال يتعين التكرار في حلقة :slight_smile:
حسنا، شكرا!

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

حسنًا، لقد كنت ساذجًا حقًا. لقد أنشأت سطر curl، واعتقدت أنني سأقوم بتشغيله 16 ألف مرة، ولكن بعد دقيقة واحدة تم تقييدي بواسطة الـ discourse الخاص بي :slight_smile: :man_facepalming:

لذا، بصفتي مبتدئًا في Rails، أحتاج إلى فتح shell في حاوية الـ discourse، والدخول إلى irb، وفعل ما هو مطلوب فعليًا؟

هل جربت استخدام دعوات جماعية؟

كان هذا سيكون خياري المفضل، بطبيعة الحال، لولا أنني لا أملك قائمة رسائل البريد الإلكتروني مسبقًا. هذا موقع لاتحاد ائتماني، لذا لا يمكن للإدارة أن تسلمني قائمة تضم 15,500 بريد إلكتروني وتخاطر بكارثة خصوصية (ولا أريد تحمل المخاطر بنفسي). لذلك، يجب علي إنشاء 16,000 رابط مع استرداد واحد في كل منها، وسيقومون بدمجها في نظام إرسال البريد الإلكتروني الخاص بهم. آمل أن يتحسن الوضع لاحقًا.

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

أنا أخمن أيضًا أنه لا يوجد مصادقة SSO يمكن استخدامها.

في هذه الحالة، ما اقترحه @pfaffman هو الطريق الصحيح.

شيء مثل

user = User.find_by(username: 'system')
16000.times do
  i = Invite.generate(user, skip_email: true, max_redemptions_allowed: 1)
  puts "/invites/#{i.invite_key}"
  # write "/invites/#{i.invite_key}" to file
end

سيفي بالغرض. ابدأ بحلقات من 1 أو 2 حتى تعمل كما تنوي.

طريقة كسولة ولكنها جيدة للقيام بذلك ستكون فقط طباعتها كلها (puts) وتسجيل جلسة الطرفية الخاصة بك :smiley:

3 إعجابات

حسنًا، لا أرغب في إزعاج أي شخص ليعلمني RoR عبر منتدى. أرى أن إضافة تأخير لمدة ثانية واحدة بين استدعاءات واجهة برمجة التطبيقات لا يؤدي إلى تذكرة سرعة، لذا سيكون هذا التشغيل الأول مجرد تشغيل بطيء.

تم إنشاء مفتاح واجهة برمجة التطبيقات للمستخدم “system”، لذلك لن تظهر جميع الدعوات على شاشات إدارة المستخدم الخاصة بي. سأبدأ الآن في البحث عن حالة إجمالي الدعوات على الخادم دون الحاجة إلى تسجيل الدخول كـ “system”، إذا كان ذلك ممكنًا على الإطلاق.

شكرًا لكم حتى الآن، آمل أن تكون لدي أسئلة أكثر ذكاءً ودهاءً في المرة القادمة :slight_smile:

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

من السهل جدًا تسجيل الدخول كـ “نظام”، إذا كنت “مطورًا” (تم تقديم رسائل البريد الإلكتروني عند بناء المنتدى كمسؤولين افتراضيين) للمنتدى. يمكنك فقط فتح صفحة المستخدم الخاصة بـ @system، وتحديد مسؤول، والتمرير لأسفل، والنقر على انتحال شخصية.

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

أوه، بالطبع… لم أقم بالتمرير إلى هذا الحد قط :slight_smile: رائع جدًا. لقد استخدمت Discourse كمستخدم على مواقع مختلفة لسنوات، لقد فاتني فقط بعض الفروق الدقيقة الأساسية كمدير لأحدها…

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