সফ্টওয়্যারের একটি বাগ বিঘ্নকারী, অধরা, উন্মাদনামূলক এবং আক্রমণাত্মক হতে পারে। প্রকৃতপক্ষে, একজন বিকাশকারীর প্রায়ই একটি সমস্যা খুঁজে পেতে এবং সমাধান করার জন্য এডিসনের দৃঢ়তার প্রয়োজন হয়।
কিন্তু গ্রিটই একমাত্র সম্পদ নয় যা একজন ডেভেলপারের প্রয়োজন। কোড ডিবাগ করার জন্য একজনেরও তথ্যের প্রয়োজন:সমস্যাটির লক্ষণ এবং প্রভাব কী? এর ফ্রিকোয়েন্সি কী? ব্যাপকতা? উদ্ভব? একটি বাগ-এর প্রমাণ এবং আর্টিফ্যাক্টস - একটি কোর ডাম্প, স্ট্যাক ট্রেস, লগ, বা টেস্ট কেস - অমূল্য৷
আসুন একটি সমস্যার প্রমাণ সংগ্রহ এবং তদন্ত করার জন্য রুবি এবং রেল ডেভেলপারদের কাছে সহজে উপলব্ধ কয়েকটি কৌশল এবং সরঞ্জামগুলি অন্বেষণ করি। ডেটা দৃঢ়তার প্রতিফলন ঘটাতে পারে না, তবে এটি আপনার প্রচেষ্টাকে সহজ করতে সাহায্য করতে পারে (এবং আপনার ঘুমকে বাঁচাতে)।
রেলগুলি একটি চলমান অ্যাপ্লিকেশনে পিয়ার করার জন্য কিছু দুর্দান্ত সরঞ্জাম সরবরাহ করে, যার মধ্যে একটি কনফিগারযোগ্য লগগারের নিজস্ব ডায়াগনস্টিক ক্যাপচার করতে এবং আপনি যেগুলি যোগ করতে চান। Rails ডাটাবেস ক্যোয়ারী এবং ভারবোজ এনকিউ লগের উৎপত্তি চিহ্নিত করতে একটি ভার্বোস ক্যোয়ারী লগ প্রদান করে যেখানে ব্যাকগ্রাউন্ড জবগুলি সারিবদ্ধ রয়েছে তা আলোকিত করতে। পরবর্তী দুটি লগ ডিফল্টরূপে development এ সক্রিয় থাকে পরিবেশ;আপনি দুটি বিবৃতি দিয়ে অন্য পরিবেশে উভয়ই সক্ষম করতে পারেন।
একটি কম পরিচিত লগ বিকল্প উপলব্ধ যেহেতু Rails 7 মন্তব্য সহ প্রতিটি SQL কোয়েরি টীকা করে। আপনি config/application.rb-এ নিম্নলিখিতগুলি যোগ করলে অথবা যেকোনো পরিবেশ ফাইল:
আপনার ক্যোয়ারী লগ স্বয়ংক্রিয়ভাবে অ্যাপ্লিকেশানের নাম, কন্ট্রোলারের নাম, অ্যাকশনের নাম বা পটভূমি কাজের নাম দিয়ে সংশোধন করা হয়। নিম্নোক্ত নমুনা সরাসরি Rails এর ডিবাগিং গাইড থেকে পাওয়া যায়:
আপনি সম্ভবত উত্পাদনে এই সমস্ত বৈশিষ্ট্যগুলি সক্ষম করতে চান না। মেমরি এবং সময়ের পরিপ্রেক্ষিতে লগজেনারেশন ব্যয়বহুল হতে পারে (লোডের অধীনে একটি অ্যাপ্লিকেশনের জন্য সীমাবদ্ধ সংস্থান)।
যাইহোক, ব্যতিক্রম আছে. আপনি একটি অন-ডিমান্ড বৈশিষ্ট্য সংক্ষিপ্তভাবে সক্ষম করতে চাইতে পারেন, বিশেষ করে যখন উন্নয়ন এবং পরীক্ষা মোডগুলি ডিবাগ করা হয়। একটি ডায়াগনস্টিককে সক্ষম বা অক্ষম করার জন্য কোড পরিবর্তন (এবং সম্ভবত পুনঃনিয়োগ) করার পরিবর্তে, অবস্থা নিয়ন্ত্রণ করতে পরিবেশ ভেরিয়েবল ব্যবহার করুন। অভ্যন্তরীণ পরিবেশ, যেমন হেরোকু, একটি পরিবেশ পরিবর্তনশীলের সেটিং পরিবর্তন করা একটি নতুন স্থাপনার বাধ্যতামূলক নয়৷
উদাহরণস্বরূপ, আপনি লগিং এবং ভারবোসিটি নিয়ন্ত্রণ করতে ভেরিয়েবলের একটি সেট সংজ্ঞায়িত করতে পারেন।
সুবিধার জন্য, কনফিগারেশন সেটিংস জিজ্ঞাসা করার জন্য একটি ছোট ক্লাস তৈরি করুন।
এখন config/application.rb এ লগিং বৈশিষ্ট্য সেট করতে ভেরিয়েবল এবং কোড ব্যবহার করুন :
প্রতিটি বিকল্প সেট করতে আপনার শেল, একটি dotenv ফাইল, আপনার ক্রমাগত একীকরণ, বা হোস্টিং এবং স্থাপনার প্ল্যাটফর্ম ব্যবহার করুন। আপনি চাহিদা অনুযায়ী একটি বৈশিষ্ট্যও ব্যবহার করতে পারেন৷ কমান্ড লাইনে সংজ্ঞায়িত পরিবেশ পরিবর্তনশীল দিয়ে কেবল অ্যাপ্লিকেশনটি শুরু করুন৷
উন্নয়নের জন্য পুমা টিউন করুন
পূর্ববর্তী বিভাগের উপর ভিত্তি করে, আসুন উন্নয়ন পরিবেশে ডিবাগ করার জন্য আপনার পুমা কনফিগারেশনকে উপযোগী করতে পরিবেশগত পরিবর্তনগুলি কীভাবে ব্যবহার করবেন তা দেখি৷
সাধারণত, Puma উৎপাদনে থ্রুপুট সর্বাধিক করার জন্য কনফিগার করা হয়, একাধিক কর্মী চালানো এবং প্রতি কর্মী প্রতি অনেক থ্রেড। উন্নয়নে, আপনি বিপরীতটি চান:একটি কর্মী, একটি থ্রেড, এবং ইন্টারেক্টিভ ডিবাগিংয়ের অনুমতি দেওয়ার জন্য একটি দীর্ঘ সময়সীমা। সেগুলির প্রত্যেকটি একটি প্যারামিটার যা আপনি টিউন করতে পারেন৷
৷
config/puma.rb পরিবর্তন করুন নিম্নলিখিত কোড প্রতিফলিত করতে।
আপনি এখন প্রতিটি পরিবেশে পুমা নিয়ন্ত্রণ করতে তিনটি পরিবেশের ভেরিয়েবল কনফিগার করতে পারেন। বিকাশে, ইন্টারেক্টিভ ডিবাগিংয়ের জন্য অপ্টিমাইজ করার মান সেট করুন।
আপনি যদি আপনার Puma সেটিংস যাচাই করতে চান, তাহলে পরিবেশ পরিবর্তনশীল PUMA_LOG_CONFIG=true সেট করুন এবং আপনার আবেদন শুরু করুন। পুমা স্টার্টআপে তার সক্রিয় কনফিগারেশন নির্গত করে।
কাকতালীয়ভাবে, সাম্প্রতিক রেইলস রিলিজে ডিফল্ট পুমা কনফিগারেশন এখানে যা দেখানো হয়েছে তার অনুরূপ (টিপের জন্য Nate Matykiewicz কে ধন্যবাদ)।
ইনলাইনে ব্যাকগ্রাউন্ড জবস চালান
যেকোন জটিলতার একটি রেল অ্যাপ্লিকেশন সাধারণত কম্পিউট-ইনটেনসিভ এবং (তুলনামূলকভাবে) দীর্ঘ-চলমান কাজগুলির জন্য ব্যাকগ্রাউন্ড জবগুলিকে সুবিধা দেয়। পটভূমির কাজগুলি অ্যাসিঙ্ক্রোনাসভাবে চলে, অনুরোধ/প্রতিক্রিয়া চক্র থেকে সংযোগ বিচ্ছিন্ন। "ব্যান্ডের বাইরে" প্রক্রিয়াকরণের জন্য আদর্শ প্রার্থীদের মধ্যে রয়েছে রিপোর্ট তৈরি করা, ইমেল পাঠানো এবং তৃতীয় পক্ষের API-এর সাথে ইন্টারঅ্যাক্ট করা। কিন্তু কাজের অসিঙ্ক্রোনাস প্রকৃতিও ডিবাগিংকে জটিল করে তোলে।
সমস্যা সমাধান সহজ করতে, কাজগুলি অবিলম্বে চালান৷ আপনার স্থানীয় উন্নয়ন এবং পরীক্ষা পরিবেশে। তাত্ক্ষণিক মোডে, কাজগুলি সারিবদ্ধ নয়, বরং তাৎক্ষণিকভাবে কার্যকর করা হয়৷ "ফোরগ্রাউন্ড" এ চলমান, আপনি ব্রেকপয়েন্ট সেট করতে এবং ইন্টারেক্টিভভাবে স্টেট পরিদর্শন করতে পারেন৷
অ্যাক্টিভ জব-এর জন্য জনপ্রিয় এবং সহজে-ব্যবস্থাপনার সারিবদ্ধ ব্যাকএন্ড ডিলেইড জব ব্যবহার করে একটি উদাহরণ দেখা যাক। বিলম্বিত কাজ সারিবদ্ধ করার জন্য একটি সেটিং প্রদান করে। ডিফল্টরূপে, সেটিং হল true এবং চাকরি যথারীতি সারিবদ্ধ। যাইহোক, যদি false সেট করা হয় , চাকরি অবিলম্বে চলে।
config/initializers/delayed_job.rb এ আপনার অ্যাপ্লিকেশনে নিম্নলিখিত কোডটি যোগ করুন :
যদি DELAYED_JOBS_DISABLE_JOB_QUEUES যে কোনো মান সেট করা হয়, সারিবদ্ধ করা নিষ্ক্রিয় করা হয়। যদি এনভায়রনমেন্ট ভেরিয়েবল ফাঁকা থাকে বা সংজ্ঞায়িত না হয়, তাহলে সারিবদ্ধ করা সক্রিয় করা হয়।
এরপরে, আপনার শেলে, কমান্ড লাইনে বা আপনার ডট ফাইলগুলিতে, DELAYED_JOBS_DISABLE_JOB_QUEUES সেট করুন প্রয়োজন অনুযায়ী।
এনভায়রনমেন্ট ভেরিয়েবলটিকে শূন্যে সেট করুন বা সারিবদ্ধতা পুনরুদ্ধার করতে এনভায়রনমেন্ট ভেরিয়েবল মুছুন।
পরিবেশ ভেরিয়েবলের নামকরণের জন্য কোন নিয়ম নেই। আপনার জন্য অর্থপূর্ণ নামগুলি চয়ন করুন৷ ভেরিয়েবলগুলিকে শ্রেণীবদ্ধ করার জন্য একটি সহায়ক নিয়ম হল একটি প্যাকেজের নাম একটি উপসর্গ হিসাবে যুক্ত করা, যেমন PUMA_ এবং DELAYED_JOB_ . আগেরটি পুমাকে প্রভাবিত করে পরিবর্তনশীল নির্দেশ করে; পরেরটি বিলম্বিত কাজের দ্বারা ব্যবহৃত ভেরিয়েবলকে বোঝায়।
নেটওয়ার্ক কলে পিয়ার করুন
ব্যাকগ্রাউন্ড কাজের মতো, রেল অ্যাপ্লিকেশনগুলি অ্যাপ্লিকেশন প্রোগ্রামিং ইন্টারফেস (এপিআই) ব্যবহার করতে পারে। APIs বহিরাগত পরিষেবাগুলিতে অ্যাক্সেস প্রদান করে, যেমন GraphQL ডেটাবেস, ই-কমার্স লেনদেন, এবং পাবলিক ডেটা উত্স৷
Net::HTTP থেকে শর্তসাপেক্ষে HTTP অনুরোধ এবং প্রতিক্রিয়া নির্গত করার জন্য এখানে আরেকটি উদাহরণ রয়েছে লাইব্রেরি পরিবেশ পরিবর্তনশীল DEBUG_HTTP হলে যেকোন অ-শূন্য মান সেট করা হয়, বহির্গামী অনুরোধ এবং অন্তর্মুখী প্রতিক্রিয়াগুলি STDOUT এ প্রিন্ট করা হয় .
নেটওয়ার্ক ক্রিয়াকলাপ দেখতে, কমান্ড লাইনে সংজ্ঞায়িত পরিবেশ পরিবর্তনশীল দিয়ে অ্যাপ্লিকেশনটি শুরু করুন।
debug? পদ্ধতি প্রকৃত ফ্ল্যাগ বাস্তবায়ন থেকে কিছু বিমূর্ততা প্রদান করে। এটি, এবং এই কোডের বাকি অংশ, আপনার সমস্ত নেটওয়ার্ক অনুরোধের জন্য বেস ক্লাস ফর্মা করতে পারে, যেমনটি প্রোডাকশন কোড থেকে নেওয়া এই সারাংশে দেখানো হয়েছে৷
রুবি রত্নগুলির মহাবিশ্ব বিশাল:ডিবাগিংয়ের জন্য উপলব্ধ সমস্ত দুর্দান্ত রত্নগুলিকে কভার করা অসম্ভব৷ পরিবর্তে, আসুন কিছু সরঞ্জাম দেখি যা আপনি তাত্ক্ষণিক বুস্টের জন্য আজ যোগ করতে পারেন। আপনি সম্ভবত এগুলির প্রতিটি আপনার সমস্ত প্রকল্পে যোগ করবেন৷
৷-
awesome_printএবংtable_printসক্রিয় রেকর্ড মডেল সহ রুবি ডেটা স্ট্রাকচারের সমৃদ্ধ, পাঠযোগ্য পরিদর্শন তৈরি করুন। আপনি জেমিন কোড বা কনসোল থেকে ব্যবহার করতে পারেন।এখানে
awesome_printদ্বারা নির্গত একটি মডেলের উদাহরণ কনসোলে:pএর পরিবর্তে ,apব্যবহার করুন উন্নত আউটপুট দেখানোর জন্য। অসাধারণ_মুদ্রণ বর্ণানুক্রমিক ক্রমে তালিকাভুক্ত বৈশিষ্ট্যগুলি, প্রতি লাইনে একটি বৈশিষ্ট্য, অন্যান্য বৈশিষ্ট্যগুলির মধ্যে৷ -
better_errorsএকটি বর্ধিত স্ট্যাক ব্যাকট্রেস, প্যারামিটার তালিকা এবং একটি ইন্টারঅ্যাকটিভ কনসোল দিয়ে স্ট্যান্ডার্ড রেল ত্রুটি পৃষ্ঠা প্রতিস্থাপন করে যেখানে আপনি ব্যতিক্রমের দৃশ্যে স্ট্যাক ফ্রেম এবং ভেরিয়েবলগুলি পরীক্ষা করতে পারেন। আপনি আপনার প্রিয় সম্পাদকের সাথে সোর্স কোড লিঙ্কগুলিও টাই করতে পারেন। এখানেbetter_errorsটাই করার কোড আছে ভিজ্যুয়াল স্টুডিও কোডে:export BETTER_ERRORS_EDITOR=vscodeচালান আপনার শেলের মধ্যে এবং Rails সার্ভার পুনরায় চালু করুন৷ এখন ফাইলগুলির লিঙ্কগুলি ভিজ্যুয়াল স্টুডিওতে স্বয়ংক্রিয়ভাবে খোলে৷ -
fakerরাখুন এবংfactory_botGemfile-এ পরীক্ষা ও উন্নয়ন গোষ্ঠীর মধ্যে রত্ন (বা তাদের বিকল্প) . আপনার যদি কনসোলে দ্রুত ডেটা তৈরি করার প্রয়োজন হয় তবে উভয়ই অমূল্য৷
আরও একটি ধারণা:আপনি যদি অ্যাপ সিগন্যালকে আপনার অ্যাপ্লিকেশন মনিটরিং টুল হিসাবে ব্যবহার করেন তবে এতে আপনার লগগুলিকে ব্যাখ্যা করার এবং ত্রুটির উত্স চিহ্নিত করার বৈশিষ্ট্য রয়েছে৷ আরও বিশদ বিবরণের জন্য AppSignal এর সাথে রুবিতে ডিবাগিং দেখুন৷
ডিবাগিং একটি দক্ষতা
ডিবাগিং কোড একটি শিল্পের জিনিস, এবং যেকোনো সৃজনশীল প্রচেষ্টার মতো, আপনি যত বেশি অনুশীলন করবেন, আপনি তত ভালো হবেন।
অন্য ডেভেলপারের সাথে পেয়ার করার সময় ডিবাগ করুন, বিশেষ করে একজন অভিজ্ঞ ডেভেলপার। যদি আপনার সঙ্গী ইচ্ছুক হন, তাহলে একসাথে উচ্চস্বরে চিন্তা করুন এবং ধারণা এবং অন্তর্দৃষ্টি বিনিময় করুন।
এগিয়ে যান এবং হ্যাক করুন!
পি.এস. আপনি যদি রুবি ম্যাজিক পোস্টগুলি প্রেস থেকে বের হওয়ার সাথে সাথে পড়তে চান তবে আমাদের রুবি ম্যাজিক নিউজলেটারে সাবস্ক্রাইব করুন এবং একটি পোস্ট মিস করবেন না!
মার্টিন স্ট্রিচার
আমাদের অতিথি লেখক মার্টিন একজন পেশাদার রুবি বিকাশকারী। তিনি পারডু ইউনিভার্সিটি থেকে কম্পিউটার সায়েন্সে একটি উন্নত ডিগ্রী অর্জন করেন, পাঁচ বছর ধরে লিনাক্স ম্যাগাজিনের (ইউএস) এডিটর-ইন-চিফ হিসেবে দায়িত্ব পালন করেন এবং আইবিএম-এর প্রাক্তন ডেভেলপার ওয়ার্কস পোর্টালে প্রকাশিত "স্পিকিং ইন ইউনিক্স" কলামের প্রতিষ্ঠাতা লেখক ছিলেন। কোডিং বা কোড সম্পর্কে না লিখলে, তিনি শিল্প সংগ্রহ করেন এবং অনেক ছোট কুকুরের সাথে ঝগড়া করেন।
মার্টিন স্ট্রেইচারের সমস্ত নিবন্ধ