كيف أتجنب rate limiting عند استيراد كمية كبيرة من البيانات؟

أحاول إنشاء مجموعة من المواضيع + المشاركات تلقائيًا. ومع ذلك، ما زلت أواجه حدود المعدل.

حاولت أولاً القيام بذلك باستخدام واجهة برمجة التطبيقات (API). وصل برنامجي بسرعة إلى أخطاء 429. حاولت تعديل حدود المعدل بصفتي المسؤول (انظر لقطة الشاشة)، لكنني لست متأكدًا من النهج الصحيح هنا، أو ما إذا كان هذا مسعىً فاشلاً.

بعد ذلك، حاولت استخدام برنامج نصي بلغة روبي مع rails r <script> من داخل الحاوية. ومع ذلك، هنا مرة أخرى، أرى An error occurred RateLimiter::LimitExceeded. لقد فوجئت بهذا، لماذا يخضع أسلوب روبي لحدود المعدل؟

على أي حال، هل هناك طريقة لتجنب ذلك؟ ما هي الطريقة الصحيحة لاستيراد البيانات بكميات كبيرة؟ فكرت في استخدام SQL مباشرة ولكنني أفضل واجهة برمجة تطبيقات عالية المستوى حتى لا أضطر إلى القلق بشأن الحقول المفقودة في قاعدة البيانات عند إنشاء عنصر.

شكراً مقدماً.

كيف يبدو الأمر؟

يجب عليك استخدام Rails لاستيراد البيانات، وليس واجهة برمجة التطبيقات (API).

يمكنك إلقاء نظرة على نصوص الاستيراد البرمجية، ولكن قد تحتاج إلى شيء أبسط.

def add_all()
  limit = 2000
  translations = Dir["/shared/translations/vagrant-data/translations/*.txt"]
  ps = Dir["/shared/translations/vagrant-data/paragraphs/*.txt"]

  # RateLimiter.new.disable_rate_limits!

  translations.each_with_index do |t,i|
    p = ps[i]

    tr_text = File.read(t)
    p_text = File.read(p)
   

    description = "#{p_text}\n\nTranslated as:\n\n#{tr_text}"
    title = " the booki (paragraph ##{i+1})"
    if (i < limit)
      begin
        puts "Adding topic #{tr_text}"
        topic = Topic.create!( title: title, category_id: 5, user_id: 3 )
        Post.create!( topic_id: topic.id, raw: description, user_id: 3, skip_validation: true )
      rescue Exception => e
        puts "An error occurred #{e}"
      end
    end
  end
end

add_all()

وهل هذا يولد خطأ في حد المعدل؟ كنت أعتقد أن هذا سيعمل بشكل جيد.

نعم، انظر مشاركتي السابقة. إنها تدخل في كتلة الإنقاذ مع هذا الخطأ.

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

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

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

كيف تم بناء هذه النسخة؟ ما هو الإصدار الذي تعمل به؟

إعجاب واحد (1)
#### مثبتة

### 3.1.0.beta5

( [ 5584fb1e3b ](https://github.com/discourse/discourse/commits/5584fb1e3b7a29d7ee5d7e43520191081dd10a16) )

لقد قمت للتو بالتثبيت العادي باستخدام دوكر. لا شيء خاص.

هل من الممكن تعطيل حدود المعدل مؤقتًا أثناء الاستيراد ثم استعادتها لاحقًا؟ حاليًا، أنا الوحيد الذي سيستخدم واجهة برمجة التطبيقات (API) (لا أتوقع السماح لمستخدمي باستخدام واجهة برمجة التطبيقات). لذا، يمكنني حتى تعطيل حدود المعدل بشكل دائم إذا كان ذلك ممكنًا.

لم أر قط حدود المعدل تعمل في Rails. ليس لدي أي فكرة.

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

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

إعجابَين (2)

للأسف، لم يؤدِ إعادة إنشاء الخادم إلى إصلاح الأمور. :frowning:

لقد حذفت الدليل postgres_data داخل shared، ثم قمت بتشغيل ./launcher rebuild app وحصلت على نسخة جديدة من التطبيق.

يقوم برنامجي النصي الآن بإنشاء المستخدم والفئة المملوكة للمستخدم، ثم يحاول إنشاء مواضيع داخل تلك الفئة. لكنه يصطدم فورًا بخطأ الحد الأقصى للمعدل: An error occurred RateLimiter::LimitExceeded

أنا حقًا في حيرة من أمري لأن الأمر يبدو وكأن نصوص rails r البرمجية لا ينبغي أن تخضع لمشاكل الحد الأقصى للمعدل، أليس كذلك؟ أرى رمزًا في النماذج يشير إلى أن رمز تحديد المعدل يتم تنفيذه، لكنني لا أعرف كيفية تعطيله ولا كيفية التحقق من أن هذا يجب أن يحدث فقط عندما يأتي طلب عبر واجهة برمجة التطبيقات (API).

هل هناك أي اقتراحات أخرى؟ أعتقد أن الدخول مباشرة عبر psql هو أفضل رهان لي الآن، وهو أمر مخيب للآمال لأن برنامج rails r النصي أنظف وأسهل في الاستخدام.

لقد أصلحتها!

قوة الاختبارات أثبتت صحتها هنا. ذهبت إلى هذا الملف:

الذي أظهر هذه الطريقة RateLimiter.enable. فكرت، لماذا لا أجرب RateLimiter.disable.

لا مزيد من أخطاء تحديد المعدل!

4 إعجابات

عمل رائع! لم أر شيئًا كهذا من قبل.

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