2012-03-06 16 views
7

मैं अपने रेल 3 आवेदन के लिए दर-सीमित इंजन खोज रहा हूं। मुझे कुछ मिल गया है लेकिन मुझे वह चाहिए जो मुझे चाहिए। मुझे रैक-थ्रॉटल मणि और कर्ट मणि मिला है। ऐसा लगता है कि प्रत्येक अनुरोध के लिए रैक-थ्रॉटल काम करता है, लेकिन मुझे अनुरोध केवल एक क्रिया के लिए सीमित करना होगा। कक्षा दो साल पहले अद्यतन किया गया था। क्या कोई मुझे किसी अन्य रेट-सीमित इंजन के बारे में बता सकता है जिसका मैं उपयोग कर सकता हूं? ध्यान दें कि इसे कैशिंग के साथ काम करना चाहिए।रेल नियंत्रकों के लिए दर-सीमा

+0

वेब सर्वर पर थ्रॉटलिंग के बारे में क्या है (अपाचे?) – Roger

+0

@Rogier परियोजना को उसकेोकू – RomanKapitonov

उत्तर

13

ठीक है, आखिरकार रैक थ्रॉटल एक अच्छा समाधान है।

आप इसे निम्न तरीके से कर सकते हैं। आपको अपने कस्टम लिमिटर को परिभाषित करने की आवश्यकता है। यह निम्न limiters

Rack::Throttle::Limiter 
Rack::Throttle::Interval 
Rack::Throttle::Hourly 
Rack::Throttle::Daily 

सब कुछ आप कस्टम तर्क को परिभाषित करने के ऊपर वर्गों में से एक से निकाले जाते हैं करने की जरूरत है दोनों में से किसी के आधार पर किया जा सकता है। उदाहरण के लिए:

class CustomLimiter < Rack::Throttle::Interval 
    def allowed?(request) 
    #custom logic here 
    end 
end 

आप RAILS_ROOT/lib पथ में इस फ़ाइल को रखना चाहिए। फिर application.rb फ़ाइल में आपको निर्दिष्ट करना चाहिए कि किस वर्ग को लिमिटर के रूप में उपयोग करना है।

#lib/custom_limiter.rb 
class CustomLimiter < Rack::Throttle::Interval 
    def allowed?(request) 
    path_info = Rails.application.routes.recognize_path request.url rescue {} 
    if path_info[:controller] == "application" and path_info[:action] == "check_answer" 
     super 
    else 
     true 
    end 
    end 
end 

#config/application.rb 
class Application < Rails::Application 
    ... 
    #Set up rate limiting 
    config.require "custom_limiter" 
    config.middleware.use CustomLimiter, :min => 0.2 
    ... 
end 

आप

युपीडी इस उपयोगी होगा विचार

आशा में this लेने की जरूरत हो सकता है: उदाहरण के लिए यदि आप केवल एक कार्रवाई करने के लिए सीमक लागू करना चाहते हैं तो आप इसे निम्नलिखित तरीके से कर सकते हैं :

आप एक और समाधान की जाँच कर सकते हैं: rack-attack

+0

गलत कोड! config.require "custom_failure" CelinHC

+0

तय करें। सबकुछ ठीक लगता है – RomanKapitonov

+0

चरण-दर-चरण के लिए धन्यवाद। बस सेटअप के बारे में कुछ और जानने के लिए। क्या आप काउंटर स्टोर करने के लिए किस प्रकार का डीबी उपयोग कर रहे हैं? – Eduardo

2

rack-throttle जो आप चाहते हैं वह करता है। Subclass Limiter और अपनी खुद की #allowed? विधि परिभाषित करें। अगर अनुरोध वह सीमा नहीं है जिसे आप सीमा चाहते हैं तो उसे सही वापस लौटाएं और सीमा की ओर गिनें न करें। daily.rb पर एक नज़र डालें। #cache_set को फिर से परिभाषित करें, इसलिए यह उन लोगों को सहेजता नहीं है जो उस मार्ग से मेल नहीं खाते हैं, जिसे आप सीमित करना चाहते हैं।

+0

पर तैनात किया जाएगा, मैंने इसे ओवरराइड किया है, और फ़ाइल को lib निर्देशिका में डाल दिया है और सर्वर को पुनरारंभ किया है लेकिन यह काम नहीं करता है। 'क्लास कस्टमलिमीटर <रैक :: थ्रॉटल :: लिमिटर डीफ़ अनुमत है? (अनुरोध) सच == सच अंत अंत 'पृष्ठ खोला गया है लेकिन संपत्ति लोड नहीं की गई है और मुझे' त्रुटि नहीं है विधि: त्रुटिहीन' प्रत्येक ' "403 निषिद्ध (दर सीमा पार हो गई) 'तो शैलियों को लागू नहीं किया जाता है।' application.rb' में मेरे पास 'config.middleware.use रैक :: थ्रॉटल :: अंतराल,: न्यूनतम => 0.2' है। क्या गलत है? – RomanKapitonov

संबंधित मुद्दे

 संबंधित मुद्दे