إذن، هذه هي مشكلتي. لدي مطلب يتمثل في ملء (seeding) مثيل Discourse الإنتاجي بما يقارب 200 منشور في كل مرة عبر إجراء إداري في إضافة (plugin). سيتم «إنشاء» هذه المنشورات بواسطة واحد من بين 10 مستخدمين عاديين مختلفين. السبب في أن هذا إجراء في إضافة هو أن مستخدمي هذه الحالة الخاصة لديهم فريق من المشرفين يريدون تدريبهم، ويريدون بعض منشورات الاختبار للتدريب عليها، مع إمكانية إضافة المزيد عند الحاجة.
نجحت في جعل هذا يعمل بشكل صحيح عن طريق تمرير skip_validations: true إلى PostCreator.new، ولكن الآن هناك مطلب بأن بعض المنشورات المُنشأة يتم أيضًا وضع علامة عليها (flag).
حاولت في البداية تعطيل RateLimiter، لكن هذا تسبب في تعطل عملية الخادم في النهاية، ربما عندما كنت أحاول إعادة تفعيله، ثم أدركت أن هذا على الأرجح ليس فكرة جيدة على أي حال.
إذن سؤالي هو: هل هناك طريقة أفضل لتجاوز حد المعدل عند تشغيل بعض الأكواد العشوائية، أي شيء من هذا القبيل:
RateLimiter.bypass do
# تشغيل بعض الأكواد غير المتأثرة بحد المعدل
end
أم أنني بحاجة ببساطة إلى نسخ معظم ما يفعله PostActionCreator ولكن باستثناء السطر المزعج؟
أي مساعدة ستكون محل تقدير كبير! ما زلت أمتص الكثير من كود Discourse، لذا أنا أدرك أنني ربما أغفلت شيئًا يجعل الأمر أسهل بكثير!
محاولة استيراد 60 ألف مستخدم عبر واجهة برمجة التطبيقات (API) بأسرع ما يمكن دون إعادة بناء. لقد حاولت أيضًا في تثبيت اختباري زيادة حد واجهة برمجة التطبيقات (API) للمسؤول عبر YAML، لكن يبدو أنها لم تنجح، ربما فعلت شيئًا خاطئًا. (أقوم بتشغيل عمليات الاستيراد على الحاوية، لذا لا ينبغي أن ينطبق تحديد المعدل عبر HTTP).
ولكن يمكنك الدخول إلى الحاوية وتعديل /var/www/discourse/config/discourse.conf وتعيين تلك المتغيرات هناك ثم القيام بـ sv restart unicorn (أو ربما sv reload unicorn). ستحتاج على الأرجح إلى القيام بشيء مثل apt-get update; apt-get install -y vim للحصول على محرر.
غريب. عندما أقوم بعرض ملف الإعدادات، تم تعيين الحد الجديد بالفعل. لذا نجح تحديث YAML:
max_admin_api_reqs_per_key_per_minute = '6000'
لكنه لا يبدو أنه يعمل. لا يزال هناك حد أقصى يبلغ 60 في الدقيقة. عندما أقوم بتقييد الطلبات إلى 60 في الدقيقة، يمر معظمها ولكن بسبب الارتجاج، لا يزال عدد قليل منها يؤدي إلى تشغيل محدد المعدل:
{'success': True, 'active': True, 'message': 'Your account is activated and ready to use.', 'user_id': 3596}
{'success': False, 'message': ' New registrations are not allowed from your IP address (maximum limit reached). Contact a staff member.', 'errors': {'ip_address': ['New registrations are not allowed from your IP address (maximum limit reached). Contact a staff member.']}, 'values': {'name': None, 'username': 'asdfd', 'email': 'user@domain.com'}, 'is_developer': False}
{'success': True, 'active': True, 'message': 'Your account is activated and ready to use.', 'user_id': 3597}
أعتقد أن الأمر يتعلق بحد آخر: أعتقد أنه الحد الأقصى للتسجيلات من عنوان IP الذي يصل إليه، لكنني لا أفهم لماذا لا يتم حظره بشكل دائم بعد الوصول إليه. ربما يكون هناك خطأ في حد البريد العشوائي هذا؟
إذا كان لدى هؤلاء المستخدمين جميعًا نفس عنوان IP، فأنا أراهن أنك على حق. أعتقد أن الحل هو تغيير هذا الإعداد أو منح الأشخاص عناوين IP وهمية مثل 127.0.0.x (أو ربما استخدام IPv6 لتسهيل الأمر؟)
متابعةً لجهود فهم البرامج النصية ولغة Ruby وما إلى ذلك، وللأداء المحتمل، اتخذت مسارًا آخر وتجاوزت جميع الحدود عن طريق الكتابة مباشرة إلى قاعدة البيانات باستخدام SQL. بهذه الطريقة تمكنت من إجراء عدة آلاف من عمليات الإدراج في الثانية.
كان هناك موضوع يسأل عن الجداول المطلوبة، وقد تم إغلاقه الآن، لذا سأجيب هنا بأنني قمت بتغيير الجداول التالية لإدراج المستخدمين: