কম্পিউটার

বাইবাগ, রেল এবং পা দিয়ে রিমোট ডিবাগিং

আপনি যদি আগে বাইবাগ না দেখে থাকেন তবে আমি সুপারিশ করছি যে আপনি এটি পরীক্ষা করে দেখুন। এটি রুবি 2.x এর জন্য একটি দুর্দান্ত ডিবাগার। এর লেখকদের ভাষায়:

Byebug ব্যবহার করা সহজ, রুবি 2-এর জন্য বৈশিষ্ট্য সমৃদ্ধ ডিবাগার। এটি এক্সিকিউশন কন্ট্রোলের জন্য নতুন ট্রেসপয়েন্ট API এবং কল স্ট্যাক নেভিগেশনের জন্য নতুন ডিবাগ ইন্সপেক্টর API ব্যবহার করে, তাই এটি অভ্যন্তরীণ মূল উৎসের উপর নির্ভর করে না। এটি একটি সি এক্সটেনশন হিসাবে বিকশিত হয়েছে, তাই এটি দ্রুত। এবং এটির একটি সম্পূর্ণ টেস্ট স্যুট রয়েছে তাই এটি নির্ভরযোগ্য৷

মৌলিক সেটআপ বেশ সহজ. শুধু মণি ইনস্টল করুন. আপনি যদি byebug ব্যবহার করেন আপনার কোডের যে কোনও জায়গায় মেথড, এক্সিকিউশন সেই সময়ে বন্ধ হয়ে যাবে এবং আপনাকে একটি ডিবাগ কনসোলে ফেলে দেওয়া হবে। আপনি এটিকে কখনও ব্যবহার করতে সেট আপ করতে পারেন।

উদাহরণস্বরূপ, আমি ডিবাগারকে এইভাবে আহ্বান করতে পারি:

require 'byebug'

def my_method
  a = 1
  byebug
end

my_method()

যদি আমি সেই ফাইলটি চালাই, আমি ডিবাগারে ড্রপ হয়ে যাব।

বাইবাগ, রেল এবং পা দিয়ে রিমোট ডিবাগিং যখন ডিবাগার ট্রিগার হয়, এটি আপনাকে একটি ইন্টারেক্টিভ শেলে ফেলে দেয়।

Pow এর সমস্যা

আপনি যদি কমান্ড লাইনে আপনার অ্যাপটি চালাতে পারেন তবে এটি ভাল। কিন্তু আপনি যদি স্থানীয়ভাবে পরিবেশন করার জন্য পাওয়ার ব্যবহার করে একটি রেল অ্যাপ তৈরি করেন?

Pow, বেশিরভাগ অ্যাপ সার্ভারের মতো, ব্যাকগ্রাউন্ডে চলে। সুতরাং এমনকি আপনি যদি এক্সিকিউশন বন্ধ করে ডিবাগার চালাতে পারেন, আপনি এটির সাথে ইন্টারঅ্যাক্ট করতে পারবেন না!

সৌভাগ্যবশত, বাইবাগ দূরবর্তী ডিবাগিংয়ের জন্য একটি প্রক্রিয়া প্রদান করে।

আপনি যদি দূরবর্তী ডিবাগিংয়ের সাথে পরিচিত না হন তবে এটি একটি সাধারণ ধারণা। যখন বাইবাগ পদ্ধতিটি বলা হয়, আপনাকে একটি ইন্টারেক্টিভ শেলে ডাম্প করার পরিবর্তে, ডিবাগার তার নিজস্ব বিশেষ সার্ভারকে ফায়ার করে। তারপর আপনি কমান্ড-লাইন ক্লায়েন্ট ব্যবহার করে এই ডিবাগ সার্ভারের সাথে সংযোগ করতে পারেন।

রিমোট ডিবাগিং দেখতে কেমন?

প্রথমে, আমি বাইবাগ পদ্ধতিকে কন্ট্রোলার অ্যাকশন বলে

বলি
class PagesController < ApplicationController
  def index
    if user_has_never_signed_in? && request.subdomain == "www"
      @hero_bg = ab_test("hero_bg", "control", "variable")
    else
      @hero_bg = "control"
    end

    byebug

  end
end

দ্বিতীয়ত, আমি সেই পদক্ষেপের জন্য একটি অনুরোধ করছি। সংযোগটি হ্যাং হয়ে গেছে বলে মনে হচ্ছে৷

বাইবাগ, রেল এবং পা দিয়ে রিমোট ডিবাগিং একটি ওয়েব অনুরোধ যা ট্রিগার করে ডিবাগার লোড হয় না

অবশেষে, আমি আমার বাইবাগ ক্লায়েন্টে সুইচ ওভার করি, যেটি আমার নির্দিষ্ট পয়েন্টে একটি ডিবাগার কনসোল দেখাচ্ছে।

বাইবাগ, রেল এবং পা দিয়ে রিমোট ডিবাগিং বাইবাগ রিমোট ডিবাগার কাজ করছে

বাইবাগ দিয়ে রিমোট ডিবাগিং সেট আপ করা হচ্ছে

আপনি যদি ইতিমধ্যেই রত্নটি ইনস্টল না করে থাকেন তবে এগিয়ে যান এবং এটি ইনস্টল করুন৷

# Gemfile

gem "byebug", group: "development"

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

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

# config/initializers/byebug.rb

if Rails.env.development?
  Byebug.start_server 'localhost', ENV.fetch("BYEBUG_SERVER_PORT", 1048).to_i
end

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

আপনি যদি একটি ভিন্ন পোর্ট ব্যবহার করেন, তাহলে আপনাকে এটি এখানে প্রতিস্থাপন করতে হবে৷

bundle exec byebug -R localhost:1048

এটাই! ডিবাগিং শুরু করার সময়।


  1. কেন এবং কিভাবে AWS ElasticBeanstalk এবং RDS এর সাথে আপনার Rails 6 অ্যাপ হোস্ট করবেন

  2. রেলের সাথে Tailwind CSS ব্যবহার করা

  3. Vue, Vuex এবং Rails সহ একটি সম্পূর্ণ-স্ট্যাক অ্যাপ্লিকেশন তৈরি করা

  4. রেলের সাথে কৌণিক ব্যবহার 5