Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

सिद्ध तकनीकों से रूबी और रेल्स बग्स का तेजी से समाधान करें

<पी> सॉफ़्टवेयर में एक बग विघटनकारी, मायावी, परेशान करने वाला और आक्रामक हो सकता है। दरअसल, एक डेवलपर को किसी समस्या को ढूंढने और ठीक करने के लिए अक्सर एडिसन की दृढ़ता की आवश्यकता होती है।

<पी> लेकिन धैर्य ही एकमात्र संपत्ति नहीं है जिसकी एक डेवलपर को आवश्यकता होती है। किसी को कोड डीबग करने के लिए भी जानकारी की आवश्यकता होती है:समस्या के लक्षण और प्रभाव क्या हैं? इसकी आवृत्ति क्या है? व्यापकता? उद्गम? बग के साक्ष्य और कलाकृतियाँ - एक कोर डंप, स्टैक ट्रेस, लॉग, या टेस्ट केस - अमूल्य हैं।

<पी> आइए किसी मुद्दे के सबूत इकट्ठा करने और जांच करने के लिए रूबी और रेल्सडेवलपर्स के पास आसानी से उपलब्ध कुछ तकनीकों और उपकरणों का पता लगाएं। डेटा दृढ़ता का स्थान नहीं ले सकता, लेकिन यह आपके प्रयासों को आसान बनाने में मदद कर सकता है (और आपकी नींद को बचा सकता है)।

<पी> रेल चल रहे एप्लिकेशन को देखने के लिए कुछ उत्कृष्ट उपकरण प्रदान करता है, जिसमें स्वयं का कॉन्फ़िगर करने योग्य लॉगरटो कैप्चर डायग्नोस्टिक्स और कोई भी जिसे आप जोड़ना चाहते हैं, शामिल है। रेल्स डेटाबेस क्वेरीज़ की उत्पत्ति को इंगित करने के लिए एक वर्बोज़ क्वेरी लॉग भी प्रदान करता है और पृष्ठभूमि नौकरियों को कतारबद्ध करने के लिए एक वर्बोज़ एन्क्यू लॉग भी प्रदान करता है। बाद के दो लॉग डिफ़ॉल्ट रूप से development में सक्षम होते हैं। वातावरण;आप दो कथनों के साथ अन्य वातावरणों में दोनों को सक्षम कर सकते हैं।

 <पी> रेल्स 7 के बाद से एक कम ज्ञात लॉग विकल्प उपलब्ध है जो प्रत्येक SQL क्वेरी को टिप्पणियों के साथ एनोटेट करता है। यदि आप निम्नलिखित को config/application.rb में जोड़ते हैं या कोई पर्यावरण फ़ाइल:

 <पी> आपका क्वेरी लॉग स्वचालित रूप से एप्लिकेशन नाम, नियंत्रक नाम, क्रिया नाम या पृष्ठभूमि कार्य नाम के साथ संशोधित हो जाता है। निम्नलिखित नमूना आउटपुट सीधे रेल्स के डिबगिंग गाइड से आता है:

 <पी> संभवतः आप इन सभी सुविधाओं को उत्पादन में सक्षम नहीं करना चाहेंगे. लॉगजेनरेशन मेमोरी और समय (लोड के तहत किसी एप्लिकेशन के लिए सीमित संसाधन) के मामले में महंगा हो सकता है।

<पी> हालाँकि, कुछ अपवाद भी हैं। आप ऑन-डिमांड सुविधा को संक्षेप में सक्षम करना चाह सकते हैं, खासकर जब विकास और परीक्षण मोड में डीबगिंग हो। डायग्नोस्टिक को सक्षम या अक्षम करने के लिए कोड को बदलने (और शायद पुनः तैनात करने) के बजाय, स्थिति को नियंत्रित करने के लिए पर्यावरण चर का उपयोग करें। कुछ वातावरणों में, जैसे कि हेरोकू में, पर्यावरण चर की सेटिंग बदलने से नई तैनाती अनिवार्य नहीं होती है।

<पी> उदाहरण के लिए, आप लॉगिंग और वर्बोसिटी को नियंत्रित करने के लिए वेरिएबल्स का एक सेट परिभाषित कर सकते हैं।

<पी> सुविधा के लिए, कॉन्फ़िगरेशन सेटिंग्स को क्वेरी करने के लिए एक छोटी कक्षा बनाएं।

 <पी> अब config/application.rb में लॉगिंग सुविधाएं सेट करने के लिए वेरिएबल और कोड का उपयोग करें :

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

 

विकास के लिए प्यूमा को ट्यून करें

<पी> पिछले अनुभाग को आगे बढ़ाते हुए, आइए देखें कि विकास परिवेश में डिबगिंग के लिए अपने प्यूमा कॉन्फ़िगरेशन को अनुकूलित करने के लिए पर्यावरण चर का उपयोग कैसे करें।

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

<पी> config/puma.rb बदलें निम्नलिखित कोड को प्रतिबिंबित करने के लिए।

 <पी> अब आप प्रत्येक वातावरण में प्यूमा को नियंत्रित करने के लिए तीन पर्यावरण चर को कॉन्फ़िगर कर सकते हैं। विकास में, इंटरैक्टिव डिबगिंग के लिए अनुकूलन के लिए मान सेट करें।

 <पी> यदि आप अपनी प्यूमा सेटिंग्स को सत्यापित करना चाहते हैं, तो पर्यावरण चरPUMA_LOG_CONFIG=true सेट करें और अपना आवेदन शुरू करें। प्यूमा स्टार्टअप पर अपना सक्रिय कॉन्फ़िगरेशन उत्सर्जित करता है।

 <पी> संयोग से, सबसे हालिया रेल रिलीज़ में डिफ़ॉल्ट प्यूमा कॉन्फ़िगरेशन वैसा ही है जैसा यहां दिखाया गया है (टिप के लिए नैट मैटीकिविज़ को धन्यवाद)।

बैकग्राउंड जॉब्स इनलाइन चलाएँ

<पी> किसी भी जटिलता का रेल एप्लिकेशन आमतौर पर गणना-गहन और (अपेक्षाकृत) लंबे समय तक चलने वाले कार्यों को चलाने के लिए पृष्ठभूमि नौकरियों का लाभ उठाता है। पृष्ठभूमि नौकरियां अतुल्यकालिक रूप से चलती हैं, अनुरोध/प्रतिक्रिया चक्र से डिस्कनेक्ट हो जाती हैं। "आउट ऑफ बैंड" प्रसंस्करण के लिए आदर्श उम्मीदवारों में रिपोर्ट तैयार करना, ईमेल भेजना और तीसरे पक्ष के एपीआई के साथ बातचीत करना शामिल है। लेकिन नौकरियों की अतुल्यकालिक प्रकृति भी डिबगिंग को जटिल बनाती है।

<पी> समस्या निवारण को सरल बनाने के लिए, कार्य तुरंत चलाएँ आपके स्थानीय विकास और परीक्षण वातावरण में। तत्काल मोड में, नौकरियों को कतारबद्ध नहीं किया जाता है, बल्कि तुरंत निष्पादित किया जाता है। "अग्रभूमि" में चलते हुए, आप ब्रेकप्वाइंट सेट कर सकते हैं और अंतःक्रियात्मक रूप से स्थिति का निरीक्षण कर सकते हैं।

<पी> आइए विलंबित जॉब का उपयोग करके एक उदाहरण देखें, जो एक्टिव जॉब के लिए एक लोकप्रिय और प्रबंधित करने में आसान कतार बैकएंड है। विलंबित कार्य कतारबद्धता को सक्षम करने के लिए एक सेटिंग प्रदान करता है। डिफ़ॉल्ट रूप से, सेटिंग true है और नौकरियाँ हमेशा की तरह कतारबद्ध हैं। हालाँकि, यदि false पर सेट किया गया है , नौकरियां तुरंत चलती हैं।

<पी> config/initializers/delayed_job.rb में अपने एप्लिकेशन में निम्नलिखित कोड जोड़ें :

 <पी> यदि DELAYED_JOBS_DISABLE_JOB_QUEUES किसी भी मान पर सेट है, कतारबद्ध करना अक्षम है। यदि पर्यावरण चर रिक्त है या परिभाषित नहीं है, तो कतार सक्षम है।

<पी> इसके बाद, अपने शेल में, कमांड लाइन पर, या अपनी डॉट फ़ाइलों में, सेटDELAYED_JOBS_DISABLE_JOB_QUEUES करें आवश्यकतानुसार.

 
 
 <पी> कतार को पुनर्स्थापित करने के लिए पर्यावरण चर को शून्य पर सेट करें या पर्यावरण चर को हटा दें।

 <पी> पर्यावरण चर के नामकरण के लिए कोई नियम नहीं हैं। अपने लिए सार्थक नाम चुनें। चरों को वर्गीकृत करने के लिए एक उपयोगी परंपरा एक पैकेज नाम को उपसर्ग के रूप में जोड़ना है, जैसे PUMA_ और DELAYED_JOB_ . पूर्व प्यूमा को प्रभावित करने वाले चर को इंगित करता है; बाद वाला विलंबित कार्य द्वारा उपयोग किए गए चर को दर्शाता है।

नेटवर्क कॉल्स को देखें

<पी> पृष्ठभूमि नौकरियों की तरह, रेल एप्लिकेशन भी एप्लिकेशन प्रोग्रामिंग इंटरफेस (एपीआई) का उपभोग कर सकते हैं। एपीआई बाहरी सेवाओं, जैसे ग्राफक्यूएल डेटाबेस, ई-कॉमर्स लेनदेन और सार्वजनिक डेटा स्रोतों तक पहुंच प्रदान करते हैं।

<पी> Net::HTTP से HTTP अनुरोधों और प्रतिक्रियाओं को सशर्त रूप से उत्सर्जित करने का एक और उदाहरण यहां दिया गया है पुस्तकालय. यदि पर्यावरण चर DEBUG_HTTP है किसी भी गैर-रिक्त मान पर सेट किया जाता है, आउटगोइंग अनुरोध और इनबाउंड प्रतिक्रियाएं STDOUT पर मुद्रित की जाती हैं .

 <पी> नेटवर्क गतिविधि देखने के लिए, बस कमांड लाइन पर परिभाषित पर्यावरण चर के साथ एप्लिकेशन प्रारंभ करें।

 <पी> debug? विधि वास्तविक ध्वज कार्यान्वयन से कुछ सार प्रदान करती है। यह, और इस कोड का बाकी हिस्सा, आपके सभी नेटवर्क अनुरोधों के लिए बेस क्लास बना सकता है, जैसा कि उत्पादन कोड से लिए गए इस सार में दिखाया गया है।

<पी> रूबी रत्नों का ब्रह्मांड विशाल है:डिबगिंग के लिए उपलब्ध सभी महान रत्नों को कवर करना असंभव है। इसके बजाय, आइए कुछ टूल देखें जिन्हें आप तुरंत बढ़ावा देने के लिए आज जोड़ सकते हैं। आप संभवतः इनमें से प्रत्येक को अपने सभी प्रोजेक्ट में जोड़ देंगे।

  • <पी> awesome_print औरtable_print सक्रिय रिकॉर्ड मॉडल सहित रूबी डेटा संरचनाओं का समृद्ध, पठनीय निरीक्षण बनाएं। आप या तो जेमिन कोड या कंसोल से उपयोग कर सकते हैं।

    <पी> यहां awesome_print द्वारा उत्सर्जित मॉडल का एक उदाहरण दिया गया है कंसोल में:

     <पी> p के बजाय , ap का उपयोग करें उन्नत आउटपुट दिखाने के लिए। awesome_print विशेषताओं को वर्णानुक्रम में सूचीबद्ध करें, प्रति पंक्ति एक विशेषता, अन्य बारीकियों के बीच।

  • <पी> better_errors मानक रेल त्रुटि पृष्ठ को एक उन्नत स्टैक बैकट्रेस, पैरामीटर सूची और एक इंटरैक्टिव कंसोल के साथ प्रतिस्थापित करता है जहां आप अपवाद के दृश्य पर स्टैक फ्रेम और चर की जांच कर सकते हैं। आप स्रोत कोड लिंक को अपने पसंदीदा संपादक से भी जोड़ सकते हैं। यहां better_errors को बांधने के लिए कोड दिया गया है विज़ुअल स्टूडियो कोड के लिए:

     <पी> export BETTER_ERRORS_EDITOR=vscode चलाएँ अपने शेल में और रेल्स सर्वर को पुनरारंभ करें। अब फ़ाइलों के लिंक विजुअल स्टूडियो में स्वचालित रूप से खुलते हैं।

  • <पी> faker रखें और factory_bot Gemfile में परीक्षण और विकास दोनों समूहों में रत्न (या उनके विकल्प)। . यदि आपको कंसोल में शीघ्रता से डेटा उत्पन्न करने की आवश्यकता है तो दोनों अमूल्य हैं।

     
<पी> एक और विचार:यदि आप ऐपसिग्नल को अपने एप्लिकेशन मॉनिटरिंग टूल के रूप में उपयोग करते हैं, तो इसमें आपके लॉग की व्याख्या करने और त्रुटियों के स्रोत को इंगित करने की सुविधाएं हैं। अधिक विवरण के लिए ऐपसिग्नल के साथ रूबी में डिबगिंग देखें।

डिबगिंग एक कौशल है

<पी> कोड डिबगिंग एक कला है, और किसी भी रचनात्मक प्रयास की तरह, आप जितना अधिक अभ्यास करेंगे, आप उतने ही बेहतर बनेंगे।

<पी> किसी अन्य डेवलपर, विशेष रूप से अनुभवी डेवलपर के साथ युग्मित करते समय डीबग करें। यदि आपका साथी इच्छुक है, तो एक साथ ज़ोर से सोचें और विचारों और अंतर्दृष्टि का आदान-प्रदान करें।

<पी> आगे बढ़ें और हैक करें!

<पी> पी.एस. यदि आप प्रेस से हटते ही रूबी मैजिक पोस्ट पढ़ना चाहते हैं, तो हमारे रूबी मैजिक न्यूज़लेटर की सदस्यता लें और एक भी पोस्ट न चूकें! सिद्ध तकनीकों से रूबी और रेल्स बग्स का तेजी से समाधान करें

मार्टिन स्ट्रीचर

<पी> हमारे अतिथि लेखक मार्टिन एक पेशेवर रूबी डेवलपर हैं। उन्होंने पर्ड्यू विश्वविद्यालय से कंप्यूटर विज्ञान में उन्नत डिग्री हासिल की, पांच साल तक लिनक्स पत्रिका (यूएस) के प्रधान संपादक के रूप में कार्य किया, और आईबीएम के पूर्व डेवलपरवर्क्स पोर्टल में प्रकाशित "स्पीकिंग इन यूनिक्स" कॉलम के संस्थापक लेखक थे। जब वह कोडिंग नहीं कर रहा होता या कोड के बारे में नहीं लिख रहा होता, तो वह कला एकत्र करता है और कई छोटे कुत्तों को परेशान करता है।

<पी> मार्टिन स्ट्रीचर

द्वारा सभी लेख
  1. लोकलब्रॉडकास्ट मैनेजर का उपयोग कैसे करें? लोकलब्रॉडकास्ट मैनेजर का उपयोग कैसे करें?

    यह उदाहरण इस बारे में प्रदर्शित करता है कि LocalBroadcastManager का उपयोग कैसे करें चरण 1 - एंड्रॉइड स्टूडियो में एक नया प्रोजेक्ट बनाएं, फाइल ⇒ न्यू प्रोजेक्ट पर जाएं और एक नया प्रोजेक्ट बनाने के लिए सभी आवश्यक विवरण भरें। चरण 2 - निम्न कोड को res/layout/activity_main.xml में जोड़ें। <?xml ver

  1. CSS का उपयोग करके डिफ़ॉल्ट प्रदर्शन मान बदलना CSS का उपयोग करके डिफ़ॉल्ट प्रदर्शन मान बदलना

    CSS में प्रत्येक तत्व का एक डिफ़ॉल्ट प्रदर्शन मान होता है और हम आसानी से बदल सकते हैं। यह प्रदर्शन गुण मान सेट करने की व्याख्या द्वारा अस्वीकार किया गया है। आइए एक उदाहरण देखें जिसमें हम क्षैतिज मेनू के लिए इनलाइन डिस्प्ले प्रॉपर्टी वैल्यू सेट कर रहे हैं - उदाहरण p { बैकग्राउंड-कलर:ऑरेंज; color:whit

  1. बाइनरी हीप का सरणी प्रतिनिधित्व बाइनरी हीप का सरणी प्रतिनिधित्व

    पूरा बाइनरी ट्री जो हीप ऑर्डरिंग के गुणों का अनुसरण करता है उसे बाइनरी हीप . कहा जाता है । बाइनरी हीप के क्रम के आधार पर, यह दो प्रकार का हो सकता है - न्यूनतम ढेर वह ढेर है जिसमें नोड का मान उसके मूल नोड के मान से अधिक या उसके बराबर होता है। न्यूनतम ढेर का रूट नोड सबसे छोटा होता है। अधिकतम ढेर वह