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

Ruby Gems के आंतरिक कामकाज को उजागर करना: एक डेवलपर की गाइड

जब आप Rails ऐप्स बनाते हैं, तो आप ढेर सारे जेम्स का उपयोग करेंगे। उनमें से कुछ पूरी तरह से जादुई लगते हैं! लेकिन वह जादू कैसे होता है?

अधिकांश जेम्स में, ऐसा कुछ भी नहीं है जो वे कर रहे हों जो आप नहीं कर सकते। यह सिर्फ रूबी कोड है। कभी-कभी यह जटिल रूबी कोड होता है। लेकिन यदि आप उस कोड का पता लगाते हैं, तो आप समझना शुरू कर देंगे कि वह जादू कहां से आता है।

स्रोत कोड ढूंढना

यह समझने के लिए कि एक जेम कैसे काम करता है, आपको उसका कोड ढूंढना होगा।

यदि कोई मेथड है जिसके बारे में आप अधिक जानना चाहते हैं, तो आपके पास स्रोत ढूंढने का एक आसान तरीका है: method और source_location। मैंने इसके बारे में पहले थोड़ा लिखा था। यहाँ एक उदाहरण है:

irb(main):001:0> ActiveRecord::Base.method(:find).source_location => ["/usr/local/lib/ruby/gems/2.1.0/gems/ activerecord-4.2.0.beta4/lib/active_record/core.rb", 127] 

लेकिन क्या होगा यदि आप एक से अधिक मेथड में रुचि रखते हैं?

यदि आपके पास अपने Rails ऐप की डायरेक्टरी के अंदर एक खुला कंसोल है, तो आप सीधे एक जेम के कोड पर जा सकते हैं:

~/Source/gem_example[master] jweiss$ bundle open rack 

यदि यह आपके Gemfile में है, तो bundle open rack पूरे rack जेम को आपके संपादक में खोल देगा। आप इसके अंदर की सभी फ़ाइलों को आराम से ब्राउज़ कर सकते हैं।

आप कहां से शुरू करते हैं?

अब जब आप जानते हैं कि जेम का कोड कहां है, तो आप इसे समझना कैसे शुरू करते हैं?

यदि आप lib/active_record.rb पढ़कर activerecord कैसे काम करता है यह सीखने की कोशिश करते हैं, तो आप कहीं नहीं पहुंचेंगे। आपको बस बहुत सारे autoload और require मिलेंगे।

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

कुछ दिलचस्प मेथड्स के नाम मिलने के बाद, आप source_location, अपने संपादक में Find in Project, या कमांड लाइन पर ag का उपयोग करके देख सकते हैं कि वे मेथड्स कहां परिभाषित हैं। और यहीं से मज़ा शुरू होता है।

जेम का कोड आपकी मशीन पर है, है ना? इसका मतलब है कि आप इसे जैसे चाहें बदल सकते हैं! आप इसे तोड़ भी सकते हैं, और किसी और को पता नहीं चलेगा।

जब मैं यह समझने की कोशिश कर रहा होता हूं कि एक जेम कैसे काम करता है, तो मैं सिर्फ कोड नहीं पढ़ता। मैं जेम में puts स्टेटमेंट जोड़ता हूं, यह पता लगाने के लिए एक्सेप्शन फेंकता हूं कि मेरा ऐप कुछ लाइनों तक कैसे पहुंचा, और यह समझने के लिए कोड के साथ खिलवाड़ करता हूं कि लेखक ने इसे इस तरह क्यों लिखा।

एक बार जब आप जान जाते हैं कि ट्रिक कैसे की जाती है, तो यह बहुत कम जादुई हो जाती है। और आपको यह अनुमान नहीं लगाना पड़ेगा कि वह कोड अजीब स्थितियों में कैसे व्यवहार करेगा, क्योंकि आप इसे स्वयं देख पाएंगे।

अपने बाद सफाई करना

जेम कोड के साथ खिलवाड़ करने के बाद, आपका ऐप बहुत खराब स्थिति में हो सकता है। यह शायद अब चल भी न सके! और यहां तक कि अगर यह चलता है, तो यह उन सभी puts स्टेटमेंट्स को आपके कंसोल में स्पैम करेगा जो आपने जोड़े थे।

लेकिन RubyGems के पास चीजों को सामान्य पर वापस लाने का एक त्वरित तरीका है:

~ jweiss$ gem pristine activerecord -v 4.2.0 Restoring gems to pristine condition... Restored activerecord-4.2.0 

या, यदि आपको याद नहीं है कि आपने किन जेम्स के साथ खिलवाड़ किया, और आप वास्तव में धैर्यवान हैं:

~ jweiss$ gem pristine --all 

उसके बाद, आपके सभी जेम्स वैसे ही वापस आ जाएंगे जैसे वे थे जब आपने उन्हें इंस्टॉल किया था।

आप क्या एक्सप्लोर करने जा रहे हैं?

जब आप अपने जेम्स के अंदर के कोड को ढूंढते, पढ़ते, और एक्सप्लोर करते हैं, तो आप उस कोड को गहरे स्तर पर समझेंगे जिस पर आप निर्भर हैं। और आपको अब धारणाओं और अनुमानों पर भरोसा नहीं करना पड़ेगा।

यह पोस्ट मूल रूप से विशेष रूप से मेरी सूची को भेजा गया था। हर शुक्रवार को अपने इनबॉक्स में इस तरह के और पोस्ट प्राप्त करने के लिए, यहां साइन अप करें!

  1. अपने रूबी तरीकों की जासूसी कैसे करें अपने रूबी तरीकों की जासूसी कैसे करें

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

  1. रूबी डीबगिंग में महारत: सामान्य त्रुटियों के लिए त्वरित सुधार रूबी डीबगिंग में महारत: सामान्य त्रुटियों के लिए त्वरित सुधार

    आपका प्रोग्राम पहली बार में कितनी बार वही करता है जो आप चाहते हैं? कई बार हमारे प्रोग्राम्स हमारी अपेक्षा के अनुसार काम नहीं करते, इसलिए हमें यह पता लगाने में मदद के लिए रूबी डीबगिंग की कला का उपयोग करना पड़ता है कि क्यों। आप निम्नलिखित त्रुटि संदेश से परिचित हो सकते हैं: undefined method some_metho

  1. iPad और iPhone पर QR कोड कैसे स्कैन करें - एक त्वरित गाइड iPad और iPhone पर QR कोड कैसे स्कैन करें - एक त्वरित गाइड

    2018 की शुरुआत में, टेक दिग्गज Apple ने अपने दिमाग को झकझोर देने वाले फीचर्स iOS 12 को रोल आउट किया। iPad और iPhone पर QR कोड स्कैन करना उन फीचर्स में से एक था जिसे Apple उपयोगकर्ताओं के अनुभव को अगले स्तर पर लाने के लिए जोड़ा गया था। यह फीचर न केवल आपके जीवन को आसान बनाने में सक्षम है बल्कि टिकट, क