रूबी ऑन रेल्स में फ़ीचर फ़्लैग क्या हैं?
<पी> फ़ीचर फ़्लैग आपके एप्लिकेशन के चलने के दौरान किसी फ़ीचर को सक्षम या अक्षम करने का एक तरीका है। यदि कोई ध्वज सक्षम है, तो सुविधा का उपयोग किया जाता है। अन्यथा, ऐसा नहीं है. छद्म कोड में कुछ इस तरह की कल्पना करें। <पी> 'फ़ीचर फ़्लैग' नाम कुछ हद तक भ्रामक है। रनटाइम पर एप्लिकेशन व्यवहार को नियंत्रित करना सुविधाओं तक ही सीमित नहीं है, बल्कि आपके प्रोग्राम के किसी भी फ़ंक्शन पर लागू होता है। उदाहरण के लिए, आप प्रदर्शन में सुधार करने और ए/बी परीक्षण चलाने के लिए फ़ीचर फ़्लैग का उपयोग कर सकते हैं। फ़ीचर फ़्लैग और किसी अन्य पुरानी शर्त के बीच एक महत्वपूर्ण अंतर यह है कि आप रनटाइम पर फ़ीचर फ़्लैग को संशोधित कर सकते हैं। <पी> उदाहरण के लिए, आइए पर्यावरण चर का उपयोग करके एक सरल फीचर फ़्लैगिंग तंत्र की कल्पना करें। <पी> पर्यावरण चर के मान को संशोधित करके, हम अपनी इच्छानुसार अपने एप्लिकेशन के हिस्सों को चालू या बंद कर सकते हैं। किसी एप्लिकेशन का कौन सा भाग? कुछ भी जो आप चाहते हैं! <पी> यदि कोई सुविधा अक्षम है तो आप यूआई के कुछ हिस्सों को छिपा सकते हैं। आप अपने कोड के कुछ हिस्सों को बदल सकते हैं, जो बहुत उपयोगी है यदि आप अपने नवीनतम रिफैक्टर में आश्वस्त नहीं हैं। फ़ीचर फ़्लैग का मेरा पसंदीदा उपयोग रूटिंग बाधाओं का उपयोग करके संपूर्ण मार्गों को छिपाना है: <पी> हम पहले से ही देख सकते हैं कि फ़ीचर फ़्लैग के लिए बहुत सारे एप्लिकेशन हैं। हालाँकि, हमारे अनुभवहीन कार्यान्वयन में एक महत्वपूर्ण कमजोरी है। प्रत्येक उपयोगकर्ता के लिए एक सुविधा या तो चालू या बंद है। <पी> यदि हम केवल विशिष्ट उपयोगकर्ताओं या उपयोगकर्ताओं के समूहों के लिए, या केवल कुछ समय के लिए सुविधाओं को सक्षम करने की क्षमता चाहते हैं तो क्या होगा? आइए फ़्लिपर पर एक नज़र डालें।फ़ीचर फ़्लैग के लिए फ़्लिपर जेम का उपयोग करना
<पी> फ़्लिपर एक रत्न है जो फीचर फ़्लैग और उन्हें टॉगल करने के विभिन्न तरीकों को रेल में उपलब्ध कराता है। यह अत्यधिक मॉड्यूलर है. मुख्य रत्न के अलावा, आपको एक स्टोरेज एडॉप्टर भी चुनना होगा - लेकिन उस पर बाद में और अधिक जानकारी दी जाएगी। आइए अभी ActiveRecord एडाप्टर का उपयोग करें। <पी> अपनी Gemfile में निम्नलिखित पंक्तियाँ जोड़ें औरbundle install चलाएँ : <पी> जब हम ActiveRecord एडाप्टर का उपयोग करते हैं, तो Flipper आपके फीचर फ़्लैग को डेटाबेस में संग्रहीत करेगा और इस प्रकार नए डेटाबेस तालिकाओं की स्थापना की आवश्यकता होगी। फ़्लिपर एक सुविधाजनक जनरेटर के साथ आता है जो आवश्यक माइग्रेशन बनाएगा। <पी> आप फ़्लिपर का उपयोग उसी तरह कर सकते हैं जैसे हमने पहले उपयोग किया था। <पी> बड़ा अंतर यह है कि पर्यावरण चर को संशोधित करने के बजाय, अब आप फ़्लिपर के उपयोगकर्ता इंटरफ़ेस का उपयोग करके सुविधाओं को टॉगल कर सकते हैं। फ़्लिपर यूआई रत्न जोड़ें और इसे इंस्टॉल करें। <पी> फ़्लिपर यूआई माउंट करने के लिए अपनी रूट फ़ाइल को संशोधित करें। <पी> यदि आप अपना एप्लिकेशन शुरू करते हैं और फ़्लिपर यूआई पर नेविगेट करते हैं, तो आपको सभी उपलब्ध सुविधाओं और उनकी स्थिति का अवलोकन दिखाई देगा। आगे बढ़ें और एक my_awesome_feature बनाएं सुविधा. <पी>
फ़्लिपर में फ़ीचर टॉगल
<पी> आपने शायद देखा होगा कि आप फ़्लिपर यूआई में किसी सुविधा को सक्षम या अक्षम करने के अलावा और भी बहुत कुछ कर सकते हैं। फ़्लिपर हमें उपयोगकर्ताओं के एक सबसेट या यहां तक कि कुछ प्रतिशत समय के लिए सुविधाओं को सक्षम करने की अनुमति देता है। आप पांच अलग-अलग तंत्रों में से किसी एक का उपयोग करके अपने फ़ीचर फ़्लैग को कॉन्फ़िगर कर सकते हैं। <पी> उनमें से एक बूलियन टॉगल, एक वैश्विक ऑन-ऑफ स्विच है। अन्य चार उससे कहीं अधिक दिलचस्प हैं:समूह, अभिनेता, अभिनेताओं का प्रतिशत, और समय का प्रतिशत।समूह
<पी> किसी सुविधा को केवल उपयोगकर्ताओं के किसी विशेष समूह के लिए सक्षम करने के लिए, समूह टॉगल का उपयोग करें। यदि यह मौजूद नहीं है, तो फ़ाइलconfig/initializers/flipper.rb बनाएं और एक नया समूह पंजीकृत करने के लिए निम्नलिखित कोड जोड़ें - उदाहरण के लिए, भुगतान किए गए उपयोगकर्ता। <पी> इस नए टॉगल का उपयोग करने के लिए, उपयोगकर्ता - या अभिनेता को पास करने के लिए फ़्लिपर आमंत्रण को संशोधित करें, जैसा कि दस्तावेज़ उन्हें कॉल करना पसंद करता है - और सुविधा का नाम। <पी> फ़्लिपर यह तय करने के लिए कि इस उपयोगकर्ता के लिए सुविधा सक्षम है या नहीं, इनिशियलाइज़र में आपके द्वारा परिभाषित ब्लॉक का उपयोग करेगा। इस स्थिति में, यह paid? को लागू करेगा विधि. अब आप इस समूह का उपयोग फ़्लिपर यूआई में कर सकते हैं। 'समूह जोड़ें' बटन पर क्लिक करें और अपना समूह चुनें। <पी>
<पी> आपके समूह को भुगतान करने वाले उपयोगकर्ताओं की आवश्यकता नहीं है। यह आपकी टीम के सदस्य या वे उपयोगकर्ता हो सकते हैं जिन्होंने बीटाप्रोग्राम के लिए साइन अप किया है। यदि आप उपयोगकर्ताओं के किसी सबसेट के लिए कुछ जारी करना चाहते हैं तो समूह टॉगल का उपयोग करना सहायक होता है। बीटारिलीज़ या आंतरिक रिलीज़ की कल्पना करें। अभिनेता
<पी> कभी-कभी, आप किसी एक व्यक्ति को कुछ जारी करना चाह सकते हैं। इस मामले में, अभिनेता का टॉगल विचारणीय है। <पी> इस तंत्र का उपयोग करने के लिए आपको अपने इनिशियलाइज़र में कुछ भी बदलने की ज़रूरत नहीं है। हालाँकि, आपको यह सुनिश्चित करना होगा कि आपका अभिनेता मॉडल - जो कि अधिकांश समय आपका उपयोगकर्ता मॉडल होगा -flipper_id लागू करता है . Flipper::Identifier सहित उसका ख्याल रखता है. <पी> फिर आप व्यक्तिगत उपयोगकर्ताओं के लिए एक सुविधा सक्षम करने के लिए इस आईडी का उपयोग कर सकते हैं। <पी>
<पी> यदि आप विशिष्ट व्यक्तियों के लिए कार्यक्षमता का पूर्वावलोकन करना चाहते हैं तो यह सुविधा टॉगल उपयोगी है। उन साझेदारों के लिए विशिष्ट परीक्षण खातों को सक्षम करने के बारे में सोचें जिन्हें किसी सुविधा को व्यापक दर्शकों के लिए जारी करने से पहले उस तक पहुंच की आवश्यकता है। अभिनेताओं का प्रतिशत
<पी> यदि आप फीचर उपयोग को धीरे-धीरे बढ़ाना चाहते हैं, तो अभिनेताओं का प्रतिशत टॉगल आपके लिए है। कल्पना कीजिए कि आपने कुछ प्रदर्शन अनुकूलन लागू किया है, और आप निश्चित नहीं हैं कि यह उत्पादन में कैसा व्यवहार करेगा। आप इसे पहले कुछ प्रतिशत उपयोगकर्ताओं के लिए लागू करेंगे और फिर अपने एप्लिकेशन की निगरानी करते हुए धीरे-धीरे उपयोग बढ़ाएंगे। <पी>
<पी> यदि चीजें विपरीत दिशा में जाती हैं, तो आप हमेशा प्रतिशत को शून्य पर रीसेट कर सकते हैं। समय का प्रतिशत
<पी> अंतिम लेकिन महत्वपूर्ण बात, आप कुछ प्रतिशत अनुरोधों के लिए एक सुविधा सक्षम कर सकते हैं। इस टॉगल का उपयोग करते समय आपको एक अभिनेता प्रदान करने की आवश्यकता नहीं है। <पी> मैं दो अलग-अलग कार्यान्वयनों के प्रदर्शन की तुलना करने के लिए इसका उपयोग करना पसंद करता हूं। ध्यान दें कि यह सुविधा टॉगल यादृच्छिक है। एक ही उपयोगकर्ता को प्रत्येक अनुरोध पर अलग व्यवहार का अनुभव होगा।फ़्लिपर में उन्नत कॉन्फ़िगरेशन
<पी> हमने पहले ही देखा है कि हम अपने डेटाबेस में फीचर फ़्लैग जानकारी संग्रहीत करने के लिए ActiveRecord एडाप्टर का उपयोग कर सकते हैं। लेकिन आपकी विशिष्ट आवश्यकताओं के आधार पर, आप एक अलग एडॉप्टर का उपयोग करना चाह सकते हैं। <पी> अधिकांश भाग के लिए, स्टोरेज एडॉप्टर को स्वैप करते समय आपको केवल संबंधित रत्न को स्थापित करना होगा और तदनुसार फ्लिपर को कॉन्फ़िगर करना होगा। उदाहरण के लिए, यदि आप रेडिस एडाप्टर का उपयोग करना चाहते हैं, तो आपflipper-redis जोड़ें अपनेGemfile पर रत्न लगाएं और Flipper इनिशियलाइज़र को अपडेट करें। <पी> स्टोरेज एडॉप्टर को कॉन्फ़िगर करने के अलावा, फ़्लिपर के कई अन्य पहलू हैं जिनमें आप बदलाव कर सकते हैं। <पी> फ़ीचर फ़्लैग जोड़ने पर थोड़ा प्रदर्शन जुर्माना लगता है, इसलिए आप आमतौर पर मेमोइज़ेशन और कैशिंग जोड़ना चाहते हैं। आप संभवतः फ़्लिपर यूआई तक पहुंच को अधिकृत उपयोगकर्ताओं तक सीमित करना भी चाहेंगे। ये विषय इस पोस्ट के दायरे से बाहर हैं, लेकिन मेरा सुझाव है कि यदि आप गहराई में जाना चाहते हैं तो फ़्लिपर दस्तावेज़ देखें।