কম্পিউটার টিউটোরিয়াল

রুবিতে ডেটা ইনস্পেকশন মাস্টার করুন: রেইলস ডেভেলপারদের জন্য ডিবাগিং টেকনিক

অধিকাংশ এক্সেপশন অন এক্সপেক্টেড ডেটা মেথডে পাস হওয়ায় হয় যেগুলো অন্যথায় ভালো কাজ করে, তাই একটি ডেটা টুকরো আপনার অ্যাপ্লিকেশনের মাধ্যমে ট্রেস করা সুরক্ষিত হয় একটি এররের কারণ খুঁজে বের করতে। এই আর্টিকেলে, আমরা রুবি এবং রেইলস অ্যাপ্লিকেশনে ডেটা ইনস্পেকশন নিয়ে আলোচনা করব।

puts, #inspect এবং p

রুবির puts মেথড কনসোলে একটি মেসেজ প্রিন্ট করতে ব্যবহৃত হয়।

unknown = "This is a string"
puts unknown

উপরের স্ক্রিপ্ট রান করলে, ভ্যালু কনসোলে প্রিন্ট হয় যাতে আপনি দেখতে পান সেটির ভেতরে কী আছে।

$ ruby puts.rb
This is a string

যদি unknown ভেরিয়েবল একটি খালি স্ট্রিং, একটি nil ভ্যালু বা একটি খালি হ্যাশ ধারণ করে, puts একটি খালি লাইন প্রিন্ট করবে। এর সাথে, আপনি এর এক্স্যাক্ট ভ্যালু দেখতে পারবেন না, এবং খালি হ্যাশ এবং স্ট্রিংয়ের মধ্যে পার্থক্য করতে পারবেন না।

$ ruby puts_empty_string.rb

সৌভাগ্যক্রমে, একটি ইনস্ট্যান্স মেথড আছে নামান inspect, যা আপনি যে সব অবজেক্টের সার্থক-materialise করবেন সেগুলোতে ইমপ্লিমেন্টেড। এটি অবজেক্টের একটি স্ট্রিং রিপ্রেজেন্টেশন রিটার্ন করে।

unknown = ""
puts unknown.inspect

একটি খালি স্ট্রিংয়ের জন্য, এটা কোটের একটি জোড়া রিটার্ন করবে, এবং একটি অ্যারের জন্য, এটা ব্র্যাকেটের একটি জোড়া রিটার্ন করবে।

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

যেহেতু puts এবং inspect কোম্বিনেশন খুব বেশি ব্যবহার হয়, একটা শর্টকাট আছে যেটি দুটোই একসাথে করে, যাকে p বলা হয়। এটা একই জিনিস করে, কিন্তু টাইপ করা দ্রুত।

unknown = ""
p unknown # equivalent to `puts unknown.inspect`

রেইলস ভিউতে ডেটা ইনস্পেকশন

যদিও p শর্টকাট আছে, inspect মেথড জানা এখনও উপকারী যখন আপনাকে একটি অবজেক্টের স্ট্রিং রিপ্রেজেন্টেশন দরকার কনসোলে প্রিন্ট ছাড়া।

একটি রেইলস ভিউতে, উদাহরণস্বরূপ, কখনো কখনো ভ্যালু রেজাল্টিং এইচটিএমএল পেজে প্রিন্ট করা বেশি উপকারী লগে খুঁজে বের করার চেয়ে।

<%= params.inspect %>

আরো কমপ্লেক্স ডেটা স্ট্রাকচার ইনস্পেক্ট করার সময়, কখনো কখনো আপনি যে ডেটা খুঁজছেন সেটা খুঁজে পাওয়া কঠিন হয়, কারণ ইনস্পেক্টেড ভ্যালু এক লাইনে প্রিন্ট হয়।

রেইলস debug হেল্পার প্রদান করে এটা সমাধান করার জন্য। শুধু ভ্যালু ইনস্পেক্ট করার বদলে, এটা অবজেক্টকে একটি হিউম্যান-রিডেবল YAML রিপ্রেজেন্টেশনে কনভার্ট করে এবং <pre> ট্যাগে রাখে ফরম্যাটিং প্রিজার্ভ করতে।

<%= debug params %>

debug হেল্পার 내부적으로 to_yaml মেথড ব্যবহার করে 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 # equivalent to `puts Product.first.to_yaml`
--- !ruby/object:Product
...

"puts"-ডিবাগিং

আপনার অ্যাপ্লিকেশনে ডেটা ইনস্পেক্ট করার আরও উপায় আছে, যেন প্রাই লাইব্রেরি এবং রুবির নিজস্ব ডিবাগার। যতokinetics এটি নিশ্চিত ভালো আইডিয়া অন্যান্য মেথড চেক আউট করার, কনসোলে একটি লগ লেখা বা একটি ভিউতে ডেটা টুকরো দেখানো প্রায়শই সবচেয়ে দ্রুত উপায় কী হচ্ছে সেটা বের করার।

আমরা জানতে চাই আপনি এই আর্টিকেল কেমন লাগলো, আপনার কোনো প্রশ্ন আছে কিনা, এবং আপনি কী নিয়ে পড়তে চান, তাই @AppSignal-এ আমাদের জানাতে ভুলবেন না।

  1. রুবিতে ল্যাম্বডা মাস্টার করুন: বেসিক থেকে অ্যাডভান্সড টেকনিক

  2. রুবি এক্সেপশনে কনটেক্সচুয়াল ডেটা যোগ করুন: একটি প্র্যাক্টিক্যাল গাইড

  3. রুবি ডেভেলপারদের জন্য অপরিহার্য ডেটা স্ট্রাকচার: একটি প্র্যাক্টিক্যাল গাইড

  4. রুবি ২.৬-এ ৯টি গুরুত্বপূর্ণ উন্নতির অন্বেষণ