7

रूबी पर रूबी के नवीनतम संस्करण (इस प्रश्न पूछने के समय 4) के लिए, कोड को लागू करने का पसंदीदा तरीका क्या है जो अनुरोध/प्रतिक्रिया जैसे प्रमाणीकरण तंत्र को संशोधित करता है। मुझे Rack middleware की वकालत करने वाली कई साइटें और ट्यूटोरियल दिखाई देते हैं, जबकि ऐसा लगता है कि समान कार्यक्षमता Action Controller filter methods के माध्यम से प्राप्त की जा सकती है।RoR - जिसे प्राथमिकता दी जाती है - रैक मिडलवेयर या सक्रिय नियंत्रक फ़िल्टर?

पसंदीदा पद्धति के बारे में बात करने के अलावा, प्रत्येक की ताकत और कमजोरियों की तुलना की जा सकती है? मेरी शुरुआती जांच में, ऐसा प्रतीत होता है कि एक्शन कंट्रोलर फ़िल्टर विधियों को अधिक आरओआर ऐप में अधिक कसकर एकीकृत किया जाता है जैसे कि आप कुछ नियंत्रक अंतराल पर कुछ फ़िल्टर चलाने को बाईपास कर सकते हैं जबकि मिडलवेयर उस स्तर का नियंत्रण नहीं कर पाता है। इस तरह का विवरण बहुत अच्छा होगा। धन्यवाद!

उत्तर

9

रैक मिडिलवेयर कर रहे हैं और ActionCo ntroller फ़िल्टर वास्तव में काफी अलग हैं।

रैक मानक रूबी वेबसर्वर इंटरफ़ेस है। यह इस तरह से काम करने के लिए डिज़ाइन किया गया है कि रैक अनुप्रयोगों या "मिडलवायर" को एक साथ जोड़ दिया जा सकता है, प्रत्येक अनुरोध/प्रतिक्रिया को किसी विशेष तरीके से बदलता है। यदि आप रैक मिडलवेयर बनाते/उपयोग करते हैं तो आपको वास्तव में रेल ऐप तक पहुंचने से पहले अनुरोध को बदलने का मौका मिल रहा है।

ActionController फिल्टर बस से पहले कर रहे हैं/हुक से पहले या रेल में अपने तत्काल नियंत्रक तरीकों के बाद अमल के बाद। ये आपके नियंत्रक विधि से पहले या बाद में तुरंत लागू किए जाएंगे, लेकिन रेल स्टैक के पूरे शेष के बाद।

इसलिए रैक मिडलवेयर और एक्शनकंट्रोलर फ़िल्टर के माध्यम से क्या संभव है में महत्वपूर्ण अंतर हैं, अर्थात्, क्योंकि एक रैक मिडलवेयर आपके एप्लिकेशन कोड से पहले निष्पादित हो रहा है, इसलिए इसे आपके एप्लिकेशन कोड के समान दायरे में निष्पादित नहीं किया जाएगा - जैसे आप अपने ऐप मॉडल आदि का उपयोग करने में सक्षम नहीं होंगे जबतक कि आप उन्हें स्पष्ट रूप से आवश्यकता नहीं करते हैं और आवश्यक प्रारंभिक प्रदर्शन (जैसे डेटाबेस कनेक्शन स्थापित करना) करते हैं।

  1. आप केवल एक विशिष्ट नियंत्रक में तरीकों से पहले अनुरोध के साथ कुछ करना चाहते हैं:

    आप, अंगूठे का नियम लिए देख रहे हैं मेरे सिर के ऊपर से यहाँ क्या मैं आपको बता जाएगा , उस नियंत्रक में पहले फ़िल्टर का उपयोग करें।

  2. यदि आप अपने ऐप में सभी नियंत्रक विधियों से पहले अनुरोध के साथ कुछ करना चाहते हैं, और आप जो करना चाहते हैं वह आपके एप्लिकेशन के लिए बहुत विशिष्ट है या आपके एप्लिकेशन कोड पर निर्भर करता है, तो अपने एप्लिकेशन नियंत्रक पर एक फ़िल्टर का उपयोग करें।

  3. यदि आप अनुरोध के साथ सामान्य कुछ करना चाहते हैं, तो अपने आवेदन कोड से बंधे नहीं हैं, और आप कल्पना करते हैं कि यह किसी अन्य ऐप में फिर से उपयोग करने में सक्षम होना अच्छा होगा, एक रैक मिडलवेयर एक होगा बेहतर फिट

आशा है कि मदद करता है।

0

जहां तक ​​मेरा कार्रवाई नियंत्रक फिल्टर को समझते हैं और रैक middlewares काफी एक ही बात कर रहे हैं, कि दो बातें छोड़कर:

  • रैक मिडलवेयर से पहले रेल ढेर कहा जाता है, ताकि आप कुछ प्रदर्शन हासिल कर सकते हैं (है कि हालांकि बारे में निश्चित नहीं)
  • रैक मिडलवेयर, आत्म निहित और पुन: प्रयोज्य अलग रैक क्षुधा के बीच है ताकि आपके रेल/इंजन नियंत्रकों और सिनात्रा/MerB/Padrino APSS साफ और सूखा
संबंधित मुद्दे