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

रूबी में डेटा निरीक्षण में महारत: रेल्स डेवलपर्स के लिए डिबगिंग तकनीकें

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

puts, #inspect और p

रूबी का puts मेथड कंसोल पर एक संदेश प्रिंट करने के लिए उपयोग किया जाता है।

unknown = "यह एक स्ट्रिंग है"
puts unknown

उपरोक्त स्क्रिप्ट चलाने पर, मान कंसोल पर प्रिंट आउट होता है ताकि आप देख सकें कि अंदर क्या है।

$ ruby puts.rb
यह एक स्ट्रिंग है

हालांकि, यदि unknown वेरिएबल एक खाली स्ट्रिंग, एक nil मान या एक खाली हैश रखता है, तो puts एक खाली लाइन प्रिंट करेगा। इसके साथ, आप उसका सटीक मान नहीं देख पाएंगे, और आप खाली हैश और स्ट्रिंग के बीच अंतर नहीं कर पाएंगे, उदाहरण के लिए।

$ ruby puts_empty_string.rb

सौभाग्य से, एक इंस्टेंस मेथड है जिसका नाम inspect है, जो आपके द्वारा सामना किए जाने वाले हर ऑब्जेक्ट पर लागू होता है। यह ऑब्जेक्ट का एक स्ट्रिंग प्रतिनिधित्व लौटाएगा।

unknown = ""
puts unknown.inspect

एक खाली स्ट्रिंग के लिए, यह उद्धरणों की एक जोड़ी लौटाएगा, और एक सरणी के लिए, यह कोष्ठक की एक जोड़ी लौटाएगा।

$ ruby inspect_empty_string.rb
""
$ ruby inspect_empty_array.rb
[]

चूंकि puts और inspect का संयोजन बहुत बार उपयोग किया जाता है, इसलिए एक शॉर्टकट है जो दोनों को एक साथ करता है, जिसे p कहा जाता है। यह वही काम करता है, लेकिन टाइप करना तेज़ है।

unknown = ""
p unknown # `puts unknown.inspect` के बराबर

रेल्स व्यू में डेटा निरीक्षण

हालांकि p शॉर्टकट है, फिर भी inspect मेथड के बारे में जानना उपयोगी है जब आपको कंसोल पर प्रिंट किए बिना किसी ऑब्जेक्ट का स्ट्रिंग प्रतिनिधित्व चाहिए।

उदाहरण के लिए, रेल्स व्यू में, कभी-कभी लॉग में इसे खोजने के बजाय मान को परिणामी HTML पेज पर प्रिंट करना अधिक उपयोगी होता है।

<%= params.inspect %>

अधिक जटिल डेटा संरचनाओं का निरीक्षण करते समय, आप जिस डेटा की तलाश कर रहे हैं उसे ढूंढना कभी-कभी मुश्किल होता है, क्योंकि निरीक्षित मान एक ही लाइन पर प्रिंट होता है।

रेल्स इससे निपटने के लिए debug हेल्पर प्रदान करता है। केवल मान का निरीक्षण करने के बजाय, यह ऑब्जेक्ट को मानव-पठनीय YAML प्रतिनिधित्व में बदल देगा और इसे फॉर्मेटिंग को संरक्षित करने के लिए <pre> टैग में डाल देगा।

<%= debug params %>

debug हेल्पर हुड के तहत YAML प्रतिनिधित्व प्राप्त करने के लिए to_yaml मेथड का उपयोग करता है, इसे <pre> ब्लॉक में लपेटने से पहले। किसी ऑब्जेक्ट को <pre> टैग में लपेटे बिना YAML प्रतिनिधित्व में बदलने के लिए, आप किसी भी ऑब्जेक्ट पर सीधे #to_yaml का उपयोग कर सकते हैं।

irb(main):004:0* puts Product.first.to_yaml
--- !ruby/object:Product
concise_attributes:
- !ruby/object:ActiveRecord::Attribute::FromDatabase
  name: id
  value_before_type_cast: 4
- !ruby/object:ActiveRecord::Attribute::FromDatabase
  name: title
  value_before_type_cast: Title
....

जैसा कि आप उम्मीद करते आए हैं, किसी ऑब्जेक्ट के YAML प्रतिनिधित्व को प्रिंट करने के लिए एक शॉर्टकट भी है। ऊपर का उदाहरण y Product.first का उपयोग करके एक ही बार में बुलाया जा सकता है।

irb(main):004:0* y Product.first # `puts Product.first.to_yaml` के बराबर
--- !ruby/object:Product
...

"puts"-डिबगिंग

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

हमें यह जानकर खुशी होगी कि आपको यह लेख कैसा लगा, यदि आपके कोई प्रश्न हैं, और आप आगे क्या पढ़ना चाहेंगे, तो @AppSignal पर हमें बताना सुनिश्चित करें।

  1. रूबी एक्सेप्शन को प्रासंगिक डेटा के साथ बढ़ाएं – एक व्यावहारिक गाइड रूबी एक्सेप्शन को प्रासंगिक डेटा के साथ बढ़ाएं – एक व्यावहारिक गाइड

    कभी-कभी मानक बैकट्रेस/एरर मैसेज कॉम्बो पर्याप्त नहीं होता। कभी-कभी आपको एरर के कारण का पता लगाने के लिए अतिरिक्त डेटा की आवश्यकता होती है। सौभाग्य से, रूबी में यह करना बेहद आसान है। एरर मैसेज कस्टमाइज़ करना अपने एरर में प्रासंगिक जानकारी जोड़ने का सबसे सरल तरीका है उसे एक्सेप्शन के मैसेज में शामिल क

  1. Ruby डेवलपर्स के लिए आवश्यक डेटा स्ट्रक्चर्स: एक व्यावहारिक गाइड Ruby डेवलपर्स के लिए आवश्यक डेटा स्ट्रक्चर्स: एक व्यावहारिक गाइड

    Arrays को समझना जब आप प्रोग्रामिंग के बारे में पढ़ना शुरू करते हैं तो एरे पहला डेटा स्ट्रक्चर है जिसके बारे में आप सीखते हैं। एरे मेमोरी के एक सन्निहित हिस्से का उपयोग करते हैं जहां ऑब्जेक्ट्स एक के बाद एक बिना अंतराल के संग्रहीत होते हैं। C जैसी निचले स्तर की प्रोग्रामिंग भाषाओं के विपरीत, Ruby आपक

  1. Ruby 2.6 में 9 प्रमुख संवर्द्धन का अन्वेषण Ruby 2.6 में 9 प्रमुख संवर्द्धन का अन्वेषण

    Ruby का एक नया संस्करण नई सुविधाओं और प्रदर्शन सुधारों के साथ आ रहा है। क्या आप परिवर्तनों के साथ बने रहना चाहेंगे? आइए एक नज़र डालते हैं! अंतहीन रेंज (Endless Ranges) Ruby 2.5 और पुराने संस्करण पहले से ही अंतहीन रेंज का एक रूप (Float::INFINITY के साथ) का समर्थन करते हैं, लेकिन Ruby 2.6 इसे अगले स्त