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

Honeybadger Gem v3: মূল ফিচার, উন্নতি, এবং যা আপনার জানা দরকার

TLDR: শুধু বুলেট পয়েন্টের জন্য, CHANGELOG চেক করুন।

আমি সম্প্রতি আমাদের রুবি এক্সেপশন রিপোর্টিং জেমের সর্বশেষ মেজর আপডেট শিপ করেছি। v2 রিলিজ একটি ফুল রি-রাইট ছিল যাতে একটি নতুন কনফিগারেশন স্ট্র্যাটেজি ছিল, v3-এ কম ব্রেকিং চেঞ্জ আছে কিন্তু অনেক ফিচার এবং ইউজেবিলিটি উন্নতি। কভার করতে অনেক কিছু আছে, তাই আমি সরাসরি ডাইভ করছি। উপভোগ করুন!

সাধারণ রুবি মোড

রেলস ওয়ার্ল্ডে এটি প্রায়শই এক্সপেক্ট করা হয় যে যখন আপনি একটি জেম ইনস্টল করবেন তবে এটি আপনার অ্যাপ্লিকেশনের সাথে অটোমেটিক্যালি ইন্টিগ্রেট হবে। উদাহরণস্বরূপ, অনেক জেম নিজস্ব Railtie প্রদান করে যাতে রেলস ইনিশিয়ালাইজ হওয়ার সময় তাদের নিজস্ব কোড রান করে।

honeybadger জেম পুরোপুরি সেই পদ্ধতিকে অদ্বায় করে, রেলস, সিনাট্রা, সাইডকিউক, এবং অন্যান্য অনেক জনপ্রিয় জেম এবং ফ্রেমওয়ার্কের জন্য বিস্তৃত এরর রিপোর্টিং সেট আপ করা খুব সহজ করে তোলে। এটি বulence সহজ: require 'honeybadger'।

কিছু রুবিস্টরা নিজস্ব ইন্টিগ্রেশন রোল আউট করতে পছন্দ করেন। মাঙ্কি প্যাচিং (যা রেলসে খুব বেশি হয়) তাদের রেজ করায়, এবং তারা চায় না যে একটি জেম সিম্পলি রিকোয়ার করলেই তাদের অ্যাপ্লিকেশনকে কম-স্পষ্ট উপায়ে পরিবর্তন করবে। আমি পুরোপুরি বুঝতে পারছি (বস্তুত, আমি নিজেও সেই মাইন্ডসেটের দিকে ঝুঁকি)।

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

সেজন্য আমি "সাধারণ রুবি" মোড যোগ করেছি (অনঅফিসিয়াল টাইটেল)। আপনি যদি সেইwierdoদের মধ্যে একজন হন যারা কনফিগারেশন লিখতে এবং মিডলওয়্যার ইনস্টল করতে স্বয়ংক্রিয়ভাবে পছন্দ করেন (অথবা আপনি শুধু প্লেইন রুবি ব্যবহার করেন), তবে আপনি এখন require 'honeybadger/ruby' ব্যবহার করতে পারেন সাধারণ require 'honeybadger'-এর বদলে। এখন আপনি Honeybadger.notify, Honeybadger.context, ইত্যাদি ব্যবহার করতে পারেন যেকোনো অটোমেটিক ইন্টিগ্রেশন এক্টিভেট না করেই: এটি মিনিমাল, প্রেডিক্টেবল এরর ট্র্যাকিং রুবির জন্য।

require 'honeybadger/ruby'
begin
  # ফেইলিং কোড
rescue => exception
  Honeybadger.notify(exception)
end

মাল্টিপল এজেন্ট

সাধারণ রুবি নিয়ে কথা বলছি, আপনি এখন রুবি ব্যবহার করে অতিরিক্ত এজেন্ট তৈরি করতে পারেন, যেগুলো আপনার Honeybadger প্রজেক্টে এরর রিপোর্ট করে। এর মানে আপনি অবশেষে একই অ্যাপ্লিকেশনে একাধিক Honeybadger প্রজেক্টে এরর রিপোর্ট করতে পারেন। এটা কেমন দেখায়:

OtherBadger = Honeybadger::Agent.new
OtherBadger.configure do |config|
  config.api_key = 'project api key'
end

begin
  # ফেইলিং কোড
rescue => exception
  OtherBadger.notify(exception)
end

Honeybadger.configure-র ফেরত

প্রথমে, আপনি যদি জেম কনফিগার করার জন্য honeybadger.yml ব্যবহার করেন, চিন্তা করবেন না -- কিছুই বদলায়নি, এবং এটি এখনও ডিফল্ট!

そう言うと, আমাদের কাস্টমাররা ছিল যারা জেমকে প্রোগ্রাম্যাটিক্যালি রুবি থেকে কনফিগার করার ক্ষমতা মিস করত। v3.0-এ আপনি দুটি জগতের সেরা পাবেন: আমরা এখনও honeybadger.yml এবং এনভায়রনমেন্ট ভেরিয়েবলের মাধ্যমে ফুল কনফিগারেশন সাপোর্ট করি এবং Honeybadger.configure ফিরিয়ে আনেছি:

Honeybadger.configure do |config|
  config.api_key = 'project api key'
  config.exceptions.ignore += [CustomError]
end

কনফিগারেশনের প্রায়োরিটি হলো YAML -> ENV -> Ruby, অর্থাৎ এনভায়রনমেন্ট ভেরিয়েবল honeybadger.yml-কে ওভাররাইড করবে, এবং Honeybadger.configure এনভায়রনমেন্ট ভেরিয়েবলকে ওভাররাইড করবে।

ক্রন জব এবং কমান্ড লাইন প্রোগ্রামে এরর রিপোর্ট

ক্রন-এর একটি দীর্ঘদিনের সমস্যা হলো এর অটোমেটিক ইমেইল ফিচার এরর আউটপুট বুঝে না। হ্যাঁ, এটি আপনাকে ইমেইল করবে যদি একটি টাস্ক ফেইল করে, কিন্তু এটি আপনাকে ইমেইল করবে ও যখন আপনার সফল টাস্কগুলো স্ট্যান্ডার্ড আউটপুট জেনারেট করে।

হে, আপনি কি Honeybadger ব্যবহার করেন কম অনঅ্যাকশনেবল ইমেইয়ালার্ট পেতে? কি কুল না হতো যদি আপনি Honeybadger ব্যবহার করতে পারতেন ক্রন ফেইলার রিপোর্ট করার জন্য ইমেইল-এর বদলে বা সাথে? এখন আপনি পারবেন।

আমরা আমাদের CLI (Command Line Interface)-এ honeybadger exec কমান্ড যোগ করেছি ক্রন ফেইলার হ্যান্ডেল করার জন্য এবং যেকোনো কমান্ড যা আপনি সাধারণত কমান্ড লাইন দিয়ে এক্সিকিউট করেন। এতে মানে bash স্ক্রিপ্ট, এক্সিকিউটেবল, make টাস্ক, ইত্যাদি। এটি ব্যবহার করতে, শুধু যেকোনো কমান্ডের আগে honeybadger exec যোগ করুন:

$ honeybadger exec my-command --my-flag

যদি কমান্ডটি সফলভাবে এক্সিকিউট হয় তবে এটি কোড ০ দিয়ে এক্সিট করবে এবং কোনো আউটপুট নেই (স্ট্যান্ডার্ড আউটও ডিফল্টরূপে ডিজেবল, কিন্তু আপনি একটি স্পেশাল ফ্ল্যাগ দিয়ে এনেবল করতে পারেন)। যদি কমান্ডটি ফেইল করে, তবে আপনি একটি Honeybadger নোটিফিকেশন পাবেন যাতে রান করা কমান্ড এবং পূর্ণ আউটপুট থাকবে।

honeybadger exec ডিফল্টরূপে সফল কমান্ডের সকল আউটপুট সাইলেন্ট করে, তাই এটি ক্রনের ইমেইল ফিচারের সাথে বিশেষভাবে উপযোগী। honeybadger exec এবং ক্রন ইমেইল দুটোই ব্যবহার করলে আপনি Honeybadger নোটিফিকেশন পাবেন যখন একটি কমান্ড ফেইল করবে; যদি কোনো কারণে Honeybadger নোটিফিকেশনও ফেইল করে (যেমন কানেকশন ইস্যু), তবে এটি মূল কমান্ডের আউটপুট ডাম্প করবে এবং ক্রন আপনাকে ফেইলার সম্পর্কে ইমেইল করবে।

কমান্ড লাইন থেকে কাস্টম এরর রিপোর্ট

এটি খুব সিম্পল। একটি বাশ স্ক্রিপ্ট (অথবা যেকোনো শেল) থেকে একটি কাস্টম Honeybadger নোটিফিকেশন পাঠাতে চান? honeybadger notify ব্যবহার করুন:

$ honeybadger notify --message "This is an error from the command line"

আপনি অপশনাল ফ্ল্যাগ যেমন --class, --component, --action, ইত্যাদি ব্যবহার করে নোটিফিকেশনে অতিরিক্ত প্রোপার্টি যোগ করতে পারেন।

অন্যান্য উন্নতি

আমরা v3-এ আরও ফিচার এবং উন্নতি যোগ করেছি:

  • Honeybadger.notify এখন স্ট্রিং আর্গুমেন্টও এক্সেপ্ট করে এক্সেপশনের পাশাপাশি, তাই আপনি করতে পারেন Honeybadger.notify("these are not the badgers you're looking for")।
  • গিট রিপোজিটরির ভিতর থাকলে, গিট রিভিশন অটোমেটিক্যালি এক্সেপশনের সাথে রিপোর্ট করা হয়। রিভিশন নোভ :revision কনফিগ অপশন দিয়ে ম্যানুয়ালি যোগ বা পরিবর্তন করা যায়।
  • CLI-এর ইউজার ইন্টারফেস এখন অনেক বান্ধবীপূর্ণ ভರ್ಬোস এরর মেসেজ সহ, এবং এটি স্ট্যান্ডঅ্যালোন এক্সিকিউটেবল হিসেবে ব্যবহার করা যাবে (রেলসের বাইরে)।
  • টেস্ট স্যুট প্রায় ১০ গুণ দ্রুত, অর্থাৎ আমরা আরও দ্রুত নতুন ফিচার এবং ইন্টিগ্রেশন ডেভেলপ করতে পারব।
  • রিকোয়ারেস্ট ডেটা ফিল্টার এখন ডিফল্টরূপে ワイル্ডকার্ড ম্যাচ স্ট্র্যাটেজি ব্যবহার করে। তাই আপনি যদি "password" ফিল্টার করেন, তবে "password" এবং "password_confirmation" রিকোয়ারেস্ট প্যারামিটার দুটোই ফিল্টার হবে (এইভাবে রেলস ফিল্টার কাজ করে)।

পরিবর্তন এবং নिष्कাশন

আমরা কিছু পরিবর্তন করেছি এবং কিছু ফিচার রিমুভ করেছি যেগুলো আর মানে দেয় না:

  • রুবি ১.৯.৩ এবং ২.০.x সাপোর্ট ড্রপ করেছি; ফরواردে ২.১.০ হবে সর্বনিম্ন অফিসিয়ালি সাপোর্টেড ভার্সন।
  • v2 থেকে সকল ডিপ্রিকেশন রিমুভ করেছি।
  • ডিপ্রিকেটেড মেট্রিক্স এবং ট্রেসিং কোড রিমুভ করেছি।
  • Honeybadger.start আর প্রয়োজন নেই (এবং ব্যবহার করলে এক্সেপশন রেইজ করবে)। আপনি যদি আগে রেলসের বাইরে Honeybadger ব্যবহার করতেন, তবে আপনি Honeybadger.configure ব্যবহার করে এজেন্ট কনফিগার করতে পারেন আলাদা Honeybadger::Config ইনস্ট্যান্স তৈরি না করে বা Honeybadger.start কল না করে।
  • plugins.skip অপশনকে skipped_pluggins-এ রিনেম করেছি এবং sidekiq.use_component এখন ডিফল্টরূপে true।
  • CGI ভেরিয়েবলগুলো এখন হোয়াইটলিস্টেড যাতে সенসিটিভ ডেটা অকস্মাত লিক হওয়া कठিন হয়।
  • ডেভেলপমেন্টে, Honeybadger.notify মেথড এখন ভ্যালিড আর্গুমেন্ট ছাড়া কল করলে এক্সেপশন রেইজ করে। প্রোডাকশনে এটি এরর লগ করে।
  • honeybadger.yml ইভ্যালুয়েট করার সময় এররগুলো এখন লগ করার বদলে রেইজ করা হয়, কনফিগারেশন সমস্যা আগে শনাক্ত করতে হেল্প করে। ERB ট্যাগের ভিতরের এররদের ব্যাকট্রেসও উন্নত করা হয়েছে যাতে এররগুলো ডিবাগ করা সহজ হয়।
  1. Stoffle প্রোগ্রামিং ল্যাঙ্গুয়েজের জন্য রুবি-ভিত্তিক পার্সার তৈরি

  2. স্টফল ভাষার জন্য রুবি ইন্টারপ্রেটার গড়ে তোলা

  3. AASM দিয়ে রুবিতে স্টেট মেশিন মাস্টার করুন: একটি প্র্যাক্টিক্যাল গাইড

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