आपके Rails प्रोजेक्ट्स में उपयोग करने के लिए सबसे अच्छे Ruby gems क्या हैं?
यही आप इस आर्टिकल में खोजेंगे!
मैं आपको 7 gems देने जा रहा हूँ, लेकिन वही पुराने gems नहीं जिन्हें आपने लाखों बार देखा है, मैं आपके साथ कुछ ऐसे gems साझा करने जा रहा हूँ जो बहुत उपयोगी हैं, लेकिन कम ज्ञात हैं।
लेकिन इससे पहले कि हम ऐसा करें...
एक चेतावनी।
मैंने डेवलपर्स को देखा है जो लगभग हर चीज़ के लिए एक gem खींच लेते हैं।
अगर यह दूर से भी मददगार लगता है।
यह सोचने के लिए एक पल लिए बिना कि क्या वह gem उनकी समस्या को हल करता है, क्या यह सबसे अच्छा विकल्प है, अच्छी तरह से मेंटेन और डॉक्यूमेंटेड है, आदि।
यह एक गलती है।
क्यों?
क्योंकि जितनी अधिक चीज़ों पर आपका प्रोजेक्ट निर्भर करता है, उतना ही अधिक संभावना है कि जब चीज़ें बदलेंगी तो यह टूट जाएगा।
और चीज़ें हर समय बदलती हैं।
नया Rails वर्जन, नया Ruby वर्जन, नई सुविधाएँ, आदि।
इसके साथ ही...
Gems आपका बहुत सारा काम बचा सकते हैं, आपके कोड को साफ करने में मदद कर सकते हैं, और सुरक्षा मुद्दों से बचा सकते हैं, इसलिए उन्हें बुद्धिमानी से उपयोग करें!
अब:
आइए सूची में आते हैं।
1. अपने कोड को साफ रखने के लिए डेड रूट्स खोजें
जैसे-जैसे आपका Rails एप्लिकेशन बढ़ता है, आप अधिक से अधिक रूट्स जमा करेंगे।
आप कोड बदलेंगे और ये रूट्स बासी हो जाएंगे।
अब आवश्यक नहीं...
लेकिन वे वहीं रहेंगे, आपके config/routes.rb में, इसे प्रबंधित करना कठिन बना देंगे।
आप कैसे पता लगाते हैं कि किन रूट्स को डिलीट करना है?
एक gem है जिसे traceroute कहा जाता है।
यह आपके रूट्स को लोड करता है और उनकी तुलना आपके द्वारा परिभाषित कंट्रोलर एक्शन्स से करता है।
लेकिन अभी इसकी दो सीमाएँ हैं:
- यह Rails 6 के साथ काम नहीं करता
- यह इम्प्लिसिट कंट्रोलर एक्शन्स का पता नहीं लगाता
मैंने Rails 6 सपोर्ट जोड़ने के लिए एक पुल रिक्वेस्ट भेजा, लेकिन मैं अपने स्वयं के संस्करण के साथ भी आया जिसमें ये सीमाएँ नहीं हैं।
आप इसे यहाँ पा सकते हैं।
2. समस्याओं से बचने के लिए अपने माइग्रेशन्स को सुरक्षित बनाएं
Rails माइग्रेशन्स गलत किए जाने पर बहुत सारी समस्याएं पैदा कर सकते हैं।
उदाहरण के लिए:
एक कॉलम को हटाने से समस्याएं हो सकती हैं क्योंकि Rails में कॉलम्स का एक कैश होता है, और माइग्रेशन चलाने से यह कैश रीसेट नहीं होता।
एक और उदाहरण:
यदि आप एक इंडेक्स जोड़ते हैं और आप PostgreSQL चला रहे हैं तो पूरा टेबल ऑपरेशन पूरा होने तक लॉक हो जाता है।
आपके यूज़र्स के लिए अच्छा नहीं।
आपका एप्लिकेशन उन अनुरोधों का जवाब देने में सक्षम नहीं होगा जिन्हें लॉक टेबल के साथ काम करने की आवश्यकता है।
अच्छी खबर?
आपको इन सभी चीज़ों को याद रखने की ज़रूरत नहीं है।
strong_migrations gem की मदद से, आपको पता चल जाएगा कि आपके पास इन असुरक्षित माइग्रेशन्स में से एक है इससे पहले कि यह प्रोडक्शन में पहुंचे।
3. असुरक्षित ट्रांजैक्शन्स को रोकें
एक Rails ट्रांजैक्शन एक "ऑल ऑर नथिंग" ऑपरेशन माना जाता है।
यह इस तरह दिखता है:
Book.transaction do # ... end
लेकिन अगर आप उन चीज़ों को करते हैं जो transaction नियंत्रण के बाहर हैं, जैसे फाइल लिखना, या API अनुरोध करना, तो यह "ऑल ऑर नथिंग" प्रभाव अब सच नहीं है।
जैसा कि आप कल्पना कर सकते हैं, यह सभी प्रकार के मुद्दों की ओर ले जाता है।
समाधान क्या है?
बहुत हाई-टेक नहीं, वास्तव में, बस "साइड इफेक्ट्स" से बचें, या उन चीज़ों को करने से जो ट्रांजैक्शन की "बाहरी दुनिया" को प्रभावित करती हैं।
isolator gem इसमें मदद कर सकता है।
यह आपके सभी ट्रांजैक्शन्स का ऑडिट करता है ताकि यह सुनिश्चित हो सके कि वे सुरक्षित हैं।
आपको बस gem इंस्टॉल करना है, फिर जब यह एक खराब transaction का पता लगाता है तो यह एक एक्सेप्शन उठाएगा।
इसे आज़माएं!
4. अपने धीमे टेस्ट्स को खोजें और उन्हें तेज़ बनाएं
धीमे टेस्ट्स मज़ेदार नहीं हैं।
लेकिन ऐसे टूल्स हैं जो आपको यह पता लगाने में मदद करते हैं कि आपके टेस्ट्स धीमे क्यों हैं ताकि आप उन्हें ठीक कर सकें!
इन टूल्स में से एक है test-prof + ruby-prof का संयोजन।
यहाँ इसका उपयोग कैसे करें:
TEST_RUBY_PROF=1 rake
आउटपुट:
%self total self wait child calls name 43.21 2.001 2.001 0.000 0.000 1 Kernel#sleep 2.97 0.184 0.138 0.000 0.046 1640 Array#permutation 1.39 0.064 0.064 0.000 0.000 144 PG::Connection#async_exec
यहाँ मैं स्पष्ट रूप से अपने sleep कॉल को देख सकता हूँ, लेकिन यह आसानी से एक API कॉल हो सकता है, एक बड़ी फाइल पढ़ना, एक धीमा SQL क्वेरी, आदि।
एक और चीज़ जो आप कर सकते हैं वह है इवेंट प्रोफाइलर का उपयोग करना।
इस तरह:
EVENT_PROF='sql.active_record' EVENT_PROF_EXAMPLES=1 rake
यह आपको यह खोजने में मदद करता है कि कौन से टेस्ट सबसे धीमे क्वेरी चला रहे हैं।
बताते चलें, Rails 6 ने पैरेलल टेस्टिंग जोड़ा, यदि आप अपने वर्तमान प्रोजेक्ट को अपग्रेड कर रहे हैं तो आपको इसे test/test_helpers.rb में सक्षम करना होगा।
5. अपने डेटा को अधिक सुसंगत बनाएं
वैलिडेशन्स बहुत अच्छे हैं।
लेकिन इससे कोई फर्क नहीं पड़ता कि आप अपने वेब एप्लिकेशन को बनाने के लिए किस फ्रेमवर्क का उपयोग कर रहे हैं।
आप डेटा को सीधे डेटाबेस में आयात करके, रॉ SQL का उपयोग करके रिकॉर्ड बनाकर, या अपने ORM में किसी ऐसे मेथड का उपयोग करके जो वैलिडेशन्स को छोड़ देता है, हमेशा अपनी वैलिडेशन्स को बायपास कर सकते हैं।
दूसरे शब्दों में...
आपकी वैलिडेशन्स केवल आपको यूज़र एरर से बचाती हैं, लेकिन डेवलपर एरर से नहीं।
ये डेवलपर एरर आपके डेटा को असंगत बना सकते हैं।
अच्छी खबर?
अधिकांश - यदि सभी नहीं - आधुनिक SQL डेटाबेस "कंस्ट्रेंट्स" को लागू करते हैं, वैलिडेशन्स जैसे नियमों का एक सेट, लेकिन डेटाबेस स्तर पर।
इसलिए यदि आप अपने डेटा की सुसंगतता बढ़ाना चाहते हैं तो आप इन कंस्ट्रेंट्स को लागू करना चाहेंगे।
एक gem जो आपकी मदद कर सकता है वह है database_consistency।
इस gem का उपयोग कैसे करें?
सबसे पहले, आपको इसे इंस्टॉल करना होगा, इसमें कोई रहस्य नहीं है।
दूसरा, आप उस प्रोजेक्ट के अंदर टर्मिनल में bundle exec database_consistency चलाते हैं जिसे आप जांचना चाहते हैं।
यह इस तरह की एक रिपोर्ट उत्पन्न करेगा:
fail Comment title column should be required in the database fail Comment author column should be required in the database
अगला क्या?
change_column_null माइग्रेशन के साथ लापता डेटाबेस कंस्ट्रेंट्स, इस मामले में, नॉट-नल, जोड़ें।
6. रिफैक्टरिंग का समय! आपके कोड में सबसे बुरे अपराधी कौन हैं?
अपने कोड को सुधारना चाहते हैं, लेकिन यह नहीं जानते कि कहां से शुरू करें?
कुछ मेट्रिक्स प्राप्त करें!
कई कोड मेट्रिक्स हैं, जैसे साइक्लोमैटिक कॉम्प्लेक्सिटी और चर्न। चर्न समय के साथ आपके कोड में परिवर्तन की दर को देखता है।
कैसे?
आपके git चेंज हिस्ट्री का उपयोग करके।
परिणाम?
उन फाइलों की एक सूची जो सबसे अधिक बदलती हैं।
यदि आप अपना 90% समय अपने User मॉडल को बदलने में बिताते हैं... यह शायद एक बड़ी फाइल है जिसमें लंबे मेथड्स हैं। रिफैक्टरिंग के लिए एक बढ़िया उम्मीदवार!
एक gem जो आपको ये लगातार बदलने वाली फाइलें खोजने में मदद करता है उसे attractor कहा जाता है।
इसे इस तरह चलाएं:
attractor report -p app
यह एक HTML रिपोर्ट उत्पन्न करता है, और हाई-चर्न फाइलों की एक सूची जिसका उपयोग आप अपने रिफैक्टरिंग प्रयासों पर ध्यान केंद्रित करने के लिए कर सकते हैं।
अच्छी चीज़!
7. पता लगाएं कि प्रोडक्शन में कौन सा कोड उपयोग किया जाता है और कौन सा नहीं
आइए अपने कोड को बेहतर बनाने में मदद करने के लिए एक और टूल के साथ समाप्त करते हैं।
इसे coverband कहा जाता है।
यदि आप इस gem को प्रोडक्शन में चलाते हैं (कम ओवरहेड), तो आपको इस बात की कवरेज रिपोर्ट मिलेगी कि कौन सा कोड चलाया जा रहा है।
आप अनयूज़्ड व्यूज़ को भी ट्रैक कर सकते हैं!

यह कोड को डिलीट करने और अपने प्रोजेक्ट को साफ करने का निर्णय लेने में आपकी मदद कर सकता है।
अनयूज़्ड कोड को जमा न होने दें!
सारांश
आपने 7 शक्तिशाली और कम ज्ञात Ruby gems के बारे में सीखा है जिनका उपयोग आप अपने (ज्यादातर Rails) प्रोजेक्ट्स में अपने टेस्ट्स को तेज़ करने, अपने कोड को बेहतर बनाने और सुरक्षा बढ़ाने के लिए कर सकते हैं।
Gem के दुरुपयोग के बारे में छोटी चेतावनी याद रखें, लेकिन नए gems को आज़माने से न रोकें।
यदि आप अपने Ruby कौशल में सुधार करना चाहते हैं और ब्लॉग का समर्थन करना चाहते हैं, तो मेरी Ruby किताब, Ruby Deep Dive की एक प्रति खरीदने पर विचार करें। 🙂
पढ़ने के लिए धन्यवाद!