Debugging হল এমন একটি প্রক্রিয়া যার মাধ্যমে কোডে ত্রুটি চিহ্নিত এবং সমাধান করা হয়। Ruby on Rails অ্যাপ্লিকেশন ডেভেলপমেন্টে debugging techniques ব্যবহার করে দ্রুত ত্রুটি নির্ণয় এবং সেগুলির সমাধান করা যায়। এই টিউটোরিয়ালে আমরা বিভিন্ন debugging techniques এবং common errors নিয়ে আলোচনা করব।
1. Debugging Techniques
১.1. byebug ব্যবহার করা
byebug হল একটি জনপ্রিয় ডিবাগিং টুল, যা কোডের মধ্যে একটি নির্দিষ্ট জায়গায় এক্সিকিউশন থামিয়ে দেয় এবং সেখানে ডিবাগিং করার সুযোগ দেয়।
byebug ব্যবহার:
প্রথমে Gemfile এ
byebuggem ইনস্টল করুন (যদি না থাকে):gem 'byebug'- তারপর,
bundle installচালান। কোডের যে জায়গায় থামাতে চান সেখানে
byebugলিখুন। উদাহরণ:def show @user = User.find(params[:id]) byebug # কোড এখানেই থামবে endএক্সিকিউশন থামানোর পর আপনি কমান্ড লাইনে বিভিন্ন ভেরিয়েবল চেক করতে পারবেন, যেমন:
@user params[:id]- এক্সিকিউশন চালু করার জন্য
continueলিখুন।
১.2. rails console ব্যবহার করা
rails console ব্যবহার করে অ্যাপ্লিকেশনের মডেল এবং অন্যান্য অবজেক্টগুলির সাথে ইন্টারঅ্যাক্ট করা যায়। এটি ডিবাগিং করার সময় খুবই কার্যকর।
rails console ব্যবহার:
কমান্ড লাইনে নিচের কমান্ডটি লিখুন:
rails consoleতারপর, আপনি মডেলগুলোর সাথে ইন্টারঅ্যাক্ট করতে পারেন, যেমন:
User.find(1)- এখানে আপনি যেকোনো কোড বা মেথড পরীক্ষা করতে পারেন।
১.3. Log Files ব্যবহার করা
Rails অ্যাপ্লিকেশন নিজে থেকেই লগ ফাইল তৈরি করে, যা ডিবাগিং করার সময় সহায়ক হতে পারে। লগ ফাইলগুলো log/ ফোল্ডারে পাওয়া যায়।
লগ ফাইল পর্যবেক্ষণ:
development.logফাইলের মধ্যে আপনার অ্যাপ্লিকেশনের সমস্ত লগ ডেটা থাকে। এখানে আপনি রিকোয়েস্ট, রেসপন্স এবং অন্যান্য সিস্টেম ইভেন্ট দেখতে পাবেন।tail -f log/development.log- লগ ফাইল ব্যবহার করে আপনি রিকোয়েস্ট, রেসপন্স, SQL কোয়েরি, এবং অ্যাপ্লিকেশন স্ট্যাক ট্রেস দেখতে পারেন।
১.4. puts এবং logger ব্যবহার করা
আপনি আপনার কোডে বিভিন্ন ভেরিয়েবল এবং অবস্থা চেক করতে puts অথবা Rails.logger ব্যবহার করতে পারেন।
puts ব্যবহার:
puts @user
Rails.logger ব্যবহার:
Rails.logger.debug "User: #{@user}"
এই কমান্ডগুলো আপনার অ্যাপ্লিকেশন স্ট্যাক ট্রেসের মধ্যে মুদ্রিত হবে এবং আপনাকে কোডের অবস্থান বুঝতে সাহায্য করবে।
১.5. binding.pry ব্যবহার করা
Pry একটি শক্তিশালী ডিবাগিং টুল যা Ruby অ্যাপ্লিকেশনের মধ্যে থামানোর জন্য ব্যবহার করা হয়।
binding.pry ব্যবহার:
প্রথমে,
Gemfile-এ Pry যোগ করুন:gem 'pry'- তারপর,
bundle installচালান। কোডে যেকোনো জায়গায়
binding.pryব্যবহার করুন:def show @user = User.find(params[:id]) binding.pry # কোড এখানেই থামবে end- এক্সিকিউশনের সময় এই লাইনে কোড থেমে যাবে এবং আপনি ইন্টারঅ্যাকটিভভাবে ডিবাগ করতে পারবেন।
2. Common Errors এবং তাদের সমাধান
২.১. ActiveRecord::RecordNotFound
এটি সাধারণত ঘটে যখন আপনি find মেথড ব্যবহার করে এমন একটি রেকর্ড খুঁজে পাওয়ার চেষ্টা করেন যা ডেটাবেসে নেই।
উদাহরণ:
@user = User.find(params[:id])
এটি যদি params[:id]-এ দেওয়া মানের সাথে কোনো রেকর্ড না পাওয়া যায়, তবে ActiveRecord::RecordNotFound ত্রুটি উঠবে।
সমাধান:
find_byব্যবহার করা:@user = User.find_by(id: params[:id])অথবা,
rescue_fromদিয়ে কাস্টম এরর হ্যান্ডলিং করা:class ApplicationController < ActionController::Base rescue_from ActiveRecord::RecordNotFound, with: :record_not_found def record_not_found render plain: "Record not found", status: 404 end end
২.২. ActionController::ParameterMissing
এটি ঘটে যখন আপনি কোনো রিকোয়েস্টে প্রাপ্ত প্যারামিটার ভুলভাবে প্রেরণ করেন এবং তা মিসিং থাকে।
উদাহরণ:
def create
@user = User.create!(params.require(:user).permit(:name, :email))
end
এটি ত্রুটি তৈরি করবে যদি params[:user] প্যারামিটার প্রাপ্ত না হয়।
সমাধান:
আপনি
permitমেথডের মাধ্যমে প্যারামিটার নিশ্চিত করতে পারেন:def create @user = User.create!(user_params) end private def user_params params.require(:user).permit(:name, :email) endএছাড়া, প্যারামিটার মিসিং হলে ডিফল্ট ভ্যালু সেট করতে পারেন:
params.fetch(:user, {})
২.৩. NoMethodError
এই ত্রুটি ঘটে যখন আপনি একটি অবজেক্টের উপর কোনো মেথড কল করেন, কিন্তু সেই অবজেক্টে সে মেথডটি নেই।
উদাহরণ:
user = User.find_by(email: "example@example.com")
user.display_name
এটি ত্রুটি সৃষ্টি করবে যদি user নাল (nil) হয়, কারণ nil অবজেক্টের উপর মেথড কল করা সম্ভব নয়।
সমাধান:
নাল চেক করা:
if user user.display_name else # error handling endঅথবা,
tryমেথড ব্যবহার করা:user.try(:display_name)
২.৪. Routing Error
এটি ঘটে যখন আপনি এমন একটি রুট কল করেন যা routes.rb ফাইলে সংজ্ঞায়িত নেই।
উদাহরণ:
No route matches [GET] "/users/1"
সমাধান:
rails routesকমান্ড ব্যবহার করে রুটের সঠিক কনফিগারেশন চেক করুন।
সারমর্ম
Ruby on Rails অ্যাপ্লিকেশন ডেভেলপমেন্টে debugging techniques যেমন byebug, rails console, লগ ফাইল পর্যবেক্ষণ, এবং Pry ব্যবহার করে কোডের ত্রুটি চিহ্নিত এবং সমাধান করা সম্ভব। তাছাড়া, বিভিন্ন সাধারণ ত্রুটি যেমন ActiveRecord::RecordNotFound, ActionController::ParameterMissing, এবং NoMethodError এর জন্য নির্দিষ্ট সমাধান রয়েছে যা আপনাকে কার্যকরভাবে ডিবাগging করতে সহায়তা করবে। Rails ডেভেলপমেন্টে এই প্রযুক্তি এবং টুলগুলি ব্যবহার করে দ্রুত সমস্যা সমাধান করা সম্ভব।
Read more