এই দৃশ্যটি চিত্রিত করুন:আপনি একজন Rails বিকাশকারী এবং সেই দুর্দান্ত বৈশিষ্ট্যটি বিকাশ করতে গত কয়েকদিন অতিবাহিত করেছেন যার জন্য সবাই অপেক্ষা করছে৷ এটি বড় এবং জটিল, তবে এটি কঠোর পরীক্ষার মধ্য দিয়ে গেছে, তাই আপনি আত্মবিশ্বাসী যে সবকিছুই উচিত হিসাবে কাজ করে। দেখা করার সময়সীমা আছে, তাই আপনি স্থাপন করুন. অবিলম্বে, সমস্ত নরক শিথিল হয়.
আপনার বৈশিষ্ট্যটি সরাসরি আপনার কিছু ব্যবহারকারীর জন্য সম্পূর্ণ অ্যাপটি ভেঙে দেয়। এটা কেন বলা কঠিন. পরীক্ষার সময় কোনো বাগ দেখা যায়নি। আপনি আপনার পরিবর্তন প্রত্যাবর্তন, কিন্তু ক্ষতি করা হয়েছে. আপনার গ্রাহকরা খুশি নন, এবং আপনি ক্ষতি নিয়ন্ত্রণ এবং কী ভুল হয়েছে তা তদন্ত করতে অদূর ভবিষ্যতে ব্যয় করবেন৷
সমস্যা হল জটিল পরিবর্তনগুলি প্রকাশ করা সহজাতভাবে ঝুঁকিপূর্ণ, আপনি যতই পরীক্ষা করুন না কেন। আপনি যদি এই বৈশিষ্ট্যটি ধীরে ধীরে রোল আউট করতেন তবে এটি ভাল হত, সম্ভবত প্রথমে অল্প কয়েকজন ব্যবহারকারীর জন্য। এটি আরও ভাল হত যদি আপনি প্রথম সমস্যাটি দেখানোর সাথে সাথে বৈশিষ্ট্যটি বন্ধ করতে পারতেন৷
এটি ঠিক যেখানে ফিচার ফ্ল্যাগগুলি আসে৷ এই পোস্টে, আমরা ফ্লিপার রত্ন ব্যবহার করে কীভাবে সেগুলিকে সেট আপ করতে হয় তা সহ রেলের বৈশিষ্ট্যযুক্ত পতাকাগুলির ইনস এবং আউটগুলির মধ্যে ডুব দেব৷ কিন্তু প্রথম:তারা কি?
রেলগুলিতে রুবিতে বৈশিষ্ট্যযুক্ত পতাকাগুলি কী?
ফিচার ফ্ল্যাগ হল আপনার অ্যাপ্লিকেশানে একটি বৈশিষ্ট্য চালু বা নিষ্ক্রিয় করার একটি উপায় যখন এটি চলছে৷ যদি একটি পতাকা সক্ষম করা হয়, বৈশিষ্ট্যটি ব্যবহার করা হয়। অন্যথায়, তা নয়। সিউডোকোডে এরকম কিছু কল্পনা করুন।
'ফিচার পতাকা' নামটি কিছুটা বিভ্রান্তিকর। রানটাইমে অ্যাপ্লিকেশানের আচরণ নিয়ন্ত্রণ করা বৈশিষ্ট্যগুলির মধ্যে সীমাবদ্ধ নয়, তবে আপনার প্রোগ্রামের মধ্যে যে কোনও ফাংশনে প্রযোজ্য। আপনি পারফরম্যান্স টুইকগুলি চেষ্টা করতে এবং A/B পরীক্ষা চালানোর জন্য বৈশিষ্ট্য ফ্ল্যাগ ব্যবহার করতে পারেন, উদাহরণস্বরূপ৷ একটি বৈশিষ্ট্য পতাকা এবং অন্য কোনও পুরানো শর্তসাপেক্ষের মধ্যে একটি উল্লেখযোগ্য পার্থক্য হল আপনি রানটাইমে বৈশিষ্ট্য ফ্ল্যাগগুলি সংশোধন করতে পারেন৷
দৃষ্টান্তের উদ্দেশ্যে, এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করে একটি সাধারণ ফিচার ফ্ল্যাগিং মেকানিজম কল্পনা করা যাক।
এনভায়রনমেন্ট ভেরিয়েবলের মান পরিবর্তন করে, আমরা আমাদের অ্যাপ্লিকেশনের অংশগুলিকে ইচ্ছামত চালু বা বন্ধ করতে পারি। একটি অ্যাপ্লিকেশন কোন অংশ? আপনি যা চান!
একটি বৈশিষ্ট্য অক্ষম থাকলে আপনি UI এর অংশগুলি লুকিয়ে রাখতে পারেন। আপনি আপনার কোডের কিছু অংশ সুইচ আউট করতে পারেন, যেটি খুবই উপযোগী যদি আপনি আপনার সাম্প্রতিক রিফ্যাক্টরে আত্মবিশ্বাসী না হন। বৈশিষ্ট্য পতাকাগুলির আমার প্রিয় ব্যবহারগুলির মধ্যে একটি হল রাউটিং সীমাবদ্ধতা ব্যবহার করে সম্পূর্ণ রুট লুকানো:
আমরা ইতিমধ্যে দেখতে পাচ্ছি যে বৈশিষ্ট্য ফ্ল্যাগগুলির জন্য প্রচুর অ্যাপ্লিকেশন রয়েছে৷ যদিও আমাদের নিষ্পাপ বাস্তবায়নের একটি উল্লেখযোগ্য দুর্বলতা রয়েছে৷ প্রতিটি ব্যবহারকারীর জন্য একটি বৈশিষ্ট্য হয় চালু বা বন্ধ।
আমরা যদি শুধুমাত্র নির্দিষ্ট ব্যবহারকারী বা ব্যবহারকারীদের গোষ্ঠীর জন্য বা শুধুমাত্র কিছু সময়ের জন্য বৈশিষ্ট্যগুলি সক্ষম করার ক্ষমতা চাই তাহলে কী হবে? আসুন Flipper-এ একবার নজর দেওয়া যাক৷
ফিচার পতাকার জন্য ফ্লিপার রত্ন ব্যবহার করা
ফ্লিপার হল এমন একটি রত্ন যা বৈশিষ্ট্য পতাকা তৈরি করে এবং রেলগুলিতে উপলভ্য টগল করার বিভিন্ন উপায়। এটি অত্যন্ত মডুলার। প্রধান রত্ন ছাড়াও, আপনাকে একটি স্টোরেজ অ্যাডাপ্টারও বাছাই করতে হবে — তবে পরে আরও কিছু। আপাতত ActiveRecord অ্যাডাপ্টার ব্যবহার করা যাক।
আপনার জেমফাইলে নিম্নলিখিত লাইন যোগ করুন এবং bundle install চালান :
যখন আমরা ActiveRecord অ্যাডাপ্টার ব্যবহার করি, তখন ফ্লিপার ডাটাবেসে আপনার বৈশিষ্ট্যের পতাকা সংরক্ষণ করবে এবং এইভাবে নতুন ডাটাবেস টেবিল সেটআপ করতে হবে। ফ্লিপার একটি সহজ জেনারেটরের সাথে আসে যা প্রয়োজনীয় মাইগ্রেশন তৈরি করবে।
আপনি ফ্লিপারকে একইভাবে ব্যবহার করতে পারেন যেভাবে আমরা পূর্বে ব্যবহার করেছি নিষ্পাপ বাস্তবায়ন৷
বড় পার্থক্য হল পরিবেশের ভেরিয়েবল পরিবর্তন করার পরিবর্তে, আপনি এখন ফ্লিপারের ইউজার ইন্টারফেস ব্যবহার করে বৈশিষ্ট্যগুলি টগল করতে পারবেন। Flipper UI রত্ন যোগ করুন এবং এটি ইনস্টল করুন।
Flipper UI মাউন্ট করতে আপনার রুট ফাইল পরিবর্তন করুন৷
৷
আপনি যদি আপনার অ্যাপ্লিকেশন শুরু করেন এবং Flipper UI-এ নেভিগেট করেন, তাহলে আপনি উপলব্ধ সমস্ত বৈশিষ্ট্য এবং তাদের অবস্থার একটি ওভারভিউ দেখতে পাবেন। এগিয়ে যান এবং একটি my_awesome_feature তৈরি করুন বৈশিষ্ট্য।

ফ্লিপারে ফিচার টগলস
আপনি সম্ভবত লক্ষ্য করেছেন যে আপনি Flipper UI-তে একটি বৈশিষ্ট্য সক্রিয় বা নিষ্ক্রিয় করার চেয়ে আরও অনেক কিছু করতে পারেন৷ Flipper আমাদের ব্যবহারকারীদের একটি উপসেট বা এমনকি সময়ের একটি শতাংশের জন্য বৈশিষ্ট্যগুলি সক্ষম করতে দেয়৷ আপনি পাঁচটি ভিন্ন পদ্ধতির একটি ব্যবহার করে আপনার বৈশিষ্ট্য পতাকা কনফিগার করতে পারেন।
তাদের মধ্যে একটি হল বুলিয়ান টগল, একটি গ্লোবাল অন-অফ সুইচ। বাকি চারটি তার চেয়ে অনেক বেশি আকর্ষণীয়:দল, অভিনেতা, অভিনেতার শতাংশ এবং সময়ের শতাংশ৷
গ্রুপ
শুধুমাত্র ব্যবহারকারীদের একটি নির্দিষ্ট গ্রুপের জন্য একটি বৈশিষ্ট্য সক্ষম করতে, গ্রুপ টগল ব্যবহার করুন। যদি এটি বিদ্যমান না থাকে, তাহলে config/initializers/flipper.rb ফাইলটি তৈরি করুন এবং একটি নতুন গ্রুপ নিবন্ধন করতে নিম্নলিখিত কোড যোগ করুন - উদাহরণস্বরূপ, অর্থপ্রদানকারী ব্যবহারকারী।
এই নতুন টগলটি ব্যবহার করতে, ব্যবহারকারীকে পাস করতে ফ্লিপার আমন্ত্রণ পরিবর্তন করুন — বা অভিনেতা, যেমন ডকুমেন্টেশন তাদের ডাকতে পছন্দ করে — এবং বৈশিষ্ট্যের নাম৷
এই ব্যবহারকারীর জন্য বৈশিষ্ট্যটি সক্ষম কিনা তা নির্ধারণ করতে ফ্লিপার আপনার ইনিশিয়ালাইজারে সংজ্ঞায়িত ব্লকটি ব্যবহার করবে। এই ক্ষেত্রে, এটি paid? আহ্বান করবে পদ্ধতি আপনি এখন Flipper UI এ এই গ্রুপটি ব্যবহার করতে পারেন। 'একটি গ্রুপ যোগ করুন' বোতামে ক্লিক করুন এবং আপনার গ্রুপ নির্বাচন করুন।

আপনার গ্রুপকে অর্থপ্রদানকারী ব্যবহারকারী হতে হবে না। এটি হতে পারে আপনার দলের সদস্য বা ব্যবহারকারী যারা একটি বিটাপ্রোগ্রামের জন্য সাইন আপ করেছেন৷ আপনি যদি ব্যবহারকারীদের একটি উপসেটে কিছু প্রকাশ করতে চান তবে গ্রুপ টগল ব্যবহার করা সহায়ক। বিটারলিজ বা অভ্যন্তরীণ রিলিজ কল্পনা করুন।
অভিনেতা
কখনও কখনও, আপনি একক ব্যক্তির কাছে কিছু প্রকাশ করতে চাইতে পারেন। এই ক্ষেত্রে, অভিনেতা টগল বিবেচনা করার মতো কিছু।
এই প্রক্রিয়াটি ব্যবহার করার জন্য আপনাকে আপনার ইনিশিয়েলাইজারে কিছু পরিবর্তন করতে হবে না। যাইহোক, আপনাকে নিশ্চিত করতে হবে যে আপনার অভিনেতা মডেল - যা বেশিরভাগ সময় আপনার ব্যবহারকারী মডেল হবে - flipper_id প্রয়োগ করে . Flipper::Identifier সহ এর যত্ন নেয়।
তারপরে আপনি পৃথক ব্যবহারকারীদের জন্য একটি বৈশিষ্ট্য সক্ষম করতে এই আইডিটি ব্যবহার করতে পারেন।

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

যদি জিনিসগুলি একদিকে যায়, আপনি সর্বদা শতাংশকে শূন্যে রিসেট করতে পারেন৷
সময়ের শতাংশ
শেষ কিন্তু অন্তত নয়, আপনি অনুরোধের শতাংশের জন্য একটি বৈশিষ্ট্য সক্ষম করতে পারেন। এই টগল ব্যবহার করার সময় আপনাকে একজন অভিনেতা প্রদান করার প্রয়োজন নেই৷
৷আমি দুটি ভিন্ন বাস্তবায়নের কর্মক্ষমতা তুলনা করতে এটি ব্যবহার করতে চাই। নোট করুন যে এই বৈশিষ্ট্যটি টগল এলোমেলো৷ একই ব্যবহারকারী প্রতিটি অনুরোধে ভিন্ন আচরণের অভিজ্ঞতা পাবেন৷
৷ফ্লিপারে উন্নত কনফিগারেশন
আমরা ইতিমধ্যে দেখেছি যে আমরা আমাদের ডাটাবেসে বৈশিষ্ট্য ফ্ল্যাগ তথ্য সংরক্ষণ করতে ActiveRecord অ্যাডাপ্টার ব্যবহার করতে পারি। কিন্তু আপনার নির্দিষ্ট চাহিদার উপর নির্ভর করে, আপনি একটি ভিন্ন অ্যাডাপ্টার ব্যবহার করতে চাইতে পারেন।
বেশিরভাগ ক্ষেত্রে, স্টোরেজ অ্যাডাপ্টারগুলি অদলবদল করার সময় আপনাকে যা করতে হবে তা হল সংশ্লিষ্ট রত্নটি ইনস্টল করা এবং সেই অনুযায়ী ফ্লিপার কনফিগার করা। উদাহরণস্বরূপ, আপনি যদি Redis অ্যাডাপ্টার ব্যবহার করতে চান, তাহলে আপনি flipper-redis যোগ করুন আপনার জেমফাইলে রত্ন এবং ফ্লিপার ইনিশিয়ালাইজার আপডেট করুন।
স্টোরেজ অ্যাডাপ্টার কনফিগার করা ছাড়াও, ফ্লিপারের আরও অনেক দিক রয়েছে যা আপনি টুইক করতে পারেন।
ফিচার ফ্ল্যাগ যোগ করলে সামান্য পারফরম্যান্স পেনাল্টি লাগে, তাই আপনি সাধারণত মেমোাইজেশন এবং ক্যাশিং যোগ করতে চান। আপনি সম্ভবত অনুমোদিত ব্যবহারকারীদের জন্য Flipper UI-তে অ্যাক্সেস সীমাবদ্ধ করতে চাইবেন। এই বিষয়গুলি এই পোস্টের সুযোগের বাইরে, তবে আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি যদি আরও গভীরে যেতে চান তবে ফ্লিপার ডকুমেন্টেশনটি দেখুন৷
রেলগুলিতে পতাকাগুলি বৈশিষ্ট্যযুক্ত করার জন্য সতর্কতা
বৈশিষ্ট্য পতাকা মহান. কিন্তু অনেক কিছুর মত, এখানেও বিবেচনা করার মত ট্রেডঅফ আছে।
বৈশিষ্ট্য পতাকা যোগ করা এবং তাদের বজায় রাখা সাংগঠনিক ওভারহেড যোগ করে। ফ্ল্যাগ ব্যবহার করে লুকানো বৈশিষ্ট্যগুলি প্রকাশ করা এবং রোল আউট করা 'নিয়মিত' কোড স্থাপনের মতো সহজ নয় — আপনাকে অবশ্যই এটি চালু করতে মনে রাখতে হবে! এটি সাধারণত খুব কঠিন নয়, তবে আপনার আর প্রয়োজন নেই এমন বৈশিষ্ট্য ফ্ল্যাগগুলি পরিষ্কার করা হতে পারে৷
প্রতিবার যখন আপনি আপনার কোডে একটি বৈশিষ্ট্য পতাকা যোগ করেন, আপনি একটি শর্তসাপেক্ষ যোগ করেন, এবং আপনি যদি সতর্ক না হন, আপনার কোডটি দ্রুত তাদের সাথে ময়লা হয়ে যায়। আপনি কখন এবং কেন নির্দিষ্ট বৈশিষ্ট্যের পতাকা তৈরি করেছেন তার ট্র্যাক রাখা চ্যালেঞ্জিং হতে পারে৷ দুঃখের বিষয়, ফিচার ফ্ল্যাগগুলি পরিচালনা করার জন্য ফ্লিপার UI নিজেই খুব বেশি অফার করে না৷
আপনার আরও সচেতন হওয়া উচিত যে বৈশিষ্ট্য ফ্ল্যাগগুলি ব্যবহার করলে একটি ছোট কার্যক্ষমতা জরিমানা হবে৷ এটি প্রশমিত করার উপায় রয়েছে, তবে আপনি যদি ভুল কনফিগার করেন বা Flipper অপব্যবহার করেন তবে এটি একটি লক্ষণীয় প্রভাব ফেলতে পারে৷
র্যাপ আপ:রুবি অন রেলে ফিচার ফ্ল্যাগ দিয়ে শুরু করুন
আমরা দেখেছি যে কীভাবে ফিচার ফ্ল্যাগগুলি আপনাকে আরও আত্মবিশ্বাসের সাথে প্রকাশ করতে সাহায্য করতে পারে, তারা কীভাবে নীতিগতভাবে কাজ করে তা শিখেছি এবং দেখেছি কিভাবে আপনি ফ্লিপার রত্ন ব্যবহার করে বৈশিষ্ট্য পতাকাগুলির সাথে শুরু করতে পারেন৷
এমন অনেক পরিস্থিতি রয়েছে যেখানে বৈশিষ্ট্য পতাকাগুলি কার্যকর। আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে, আপনি পাঁচটি ভিন্ন টগলের মধ্যে একটির জন্য পৌঁছাতে পারেন — বুলিয়ান, গ্রুপ, অভিনেতা, অভিনেতার শতাংশ, বা অনুরোধের শতাংশ৷
যদিও ফিচার ফ্ল্যাগগুলির সাথে কাজ করার জন্য এর সতর্কতা রয়েছে এবং এতে কিছুটা অভ্যস্ত হতে পারে, তবুও এগুলি আপনার নিষ্পত্তির জন্য একটি দুর্দান্ত সরঞ্জাম৷
পরের বার পর্যন্ত, খুশি কোডিং!
পি.এস. আপনি যদি রুবি ম্যাজিক পোস্টগুলি প্রেস থেকে বের হওয়ার সাথে সাথে পড়তে চান তবে আমাদের রুবি ম্যাজিক নিউজলেটারে সাবস্ক্রাইব করুন এবং একটি পোস্ট মিস করবেন না!