এই নিবন্ধটি আংশিকভাবে লেখকের Advanced CableReady বইয়ের একটি আসন্ন অধ্যায় দ্বারা অনুপ্রাণিত হয়েছে, এবং AppSignal-এর জন্য এই অতিথি পোস্টটিকে উপযুক্ত করার জন্য তৈরি করা হয়েছে৷
বিজ্ঞপ্তিগুলি অনেক ওয়েব অ্যাপ্লিকেশন দ্বারা ভাগ করা একটি সাধারণ ক্রস-কাটিং উদ্বেগ৷
নোটিসড জেম আপনার রুবি অন রেল অ্যাপ্লিকেশনের জন্য একটি ডাটাবেস-ব্যাকড মডেল এবং প্লাগেবল ডেলিভারি পদ্ধতি প্রদান করার মাধ্যমে বিজ্ঞপ্তিগুলি বিকাশ করা চমত্কারভাবে সহজ করে তোলে। এটি মেইলার, ওয়েবসকেট এবং আরও কয়েকটি বিতরণ পদ্ধতির জন্য অন্তর্নির্মিত সমর্থন সহ আসে৷
আমরা আপনার Ruby on Rails অ্যাপ্লিকেশনে সিস্টেম বিজ্ঞপ্তিগুলিকে ট্রিগার করার জন্য CableReady রত্ন ব্যবহার করার যোগ্যতাও পরীক্ষা করব৷
আসুন এটিতে প্রবেশ করি!
পূর্বশর্ত এবং প্রয়োজনীয়তা
প্রতিবার এবং তারপরে, আপনাকে আপনার অ্যাপ থেকে সিস্টেম বিজ্ঞপ্তিগুলি ট্রিগার করতে হতে পারে৷ আপনি বিজ্ঞপ্তি API এর মাধ্যমে এটি অর্জন করতে পারেন৷
৷উদাহরণস্বরূপ, ধরা যাক আপনার অ্যাপ্লিকেশন ব্যবহারকারীদের বড় ফাইল আপলোড করতে দেয় যা ট্রান্সকোড হতে অনেক সময় নেয়। ব্যবহারকারীদের ভিডিও আপলোড সম্পূর্ণ হলে আপনি একটি বিজ্ঞপ্তি পাঠাতে চাইতে পারেন। এর মানে হল তারা এই সময়ের মধ্যে একটি নতুন টাস্কে যেতে পারে এবং কয়েক মিনিটের জন্য আপনার অ্যাপ্লিকেশন খোলা রাখতে হবে না৷
সৌভাগ্যবশত, এই দুটি পূর্বশর্তের সাথে সিস্টেমের বিজ্ঞপ্তিগুলিকে কার্যকর করা এবং বের করা সহজ:
- নোটিসডের কাস্টম ডেলিভারি পদ্ধতির জন্য সমর্থন রয়েছে (নোটিসড আপনার পছন্দের যেকোন ট্রান্সপোর্ট মেকানিজম বাস্তবায়নের জন্য একটি সাধারণ API প্রকাশ করে — উদাহরণস্বরূপ, ডিসকর্ড সার্ভারে পোস্ট করা)।
- CableReady-এর কম্পনে একটি বিজ্ঞপ্তি অপারেশন তীর রয়েছে৷ ৷
CableReady এবং Noticed-এর জন্য প্রয়োজনীয়তার তালিকাটি সংক্ষিপ্ত — আপনার কেবল নিম্নলিখিতগুলি প্রয়োজন:
- একটি ActionCable সার্ভার চলছে
- একটি ActiveJob ব্যাকএন্ড (সাধারণত Noticed দ্বারা ব্যবহৃত)
দ্রষ্টব্য:এই প্রকল্পের জন্য সম্পূর্ণ নমুনা কোড GitHub এ উপলব্ধ। এছাড়াও আপনি নীচে অনুসরণ করতে পারেন — আমরা আপনাকে ধাপে ধাপে গাইড করব৷৷
আপনার রুবি অন রেল অ্যাপ্লিকেশনের জন্য একটি ক্যাবলরেডি প্রাইমার
আসুন CableReady এর সাথে নিজেদের পরিচিত করে শুরু করি। 2017 সালে প্রকাশিত, এটিকে "অনুপস্থিত ActionCable স্ট্যান্ডার্ড লাইব্রেরি" হিসেবে ভাবা যেতে পারে .
টার্বোর আবির্ভাবের আগে, রুবি অন রেলে রিয়েল-টাইম অ্যাপ্লিকেশন তৈরি করার একমাত্র উপায় ছিল অ্যাকশন ক্যাবলের মাধ্যমে। ActionCable হল WebSockets-এর চারপাশে নেটিভ রেল র্যাপার, যেকোন সময়ে উভয় দিকেই একটি স্থায়ী সংযোগের মাধ্যমে বার্তা পাঠাতে সার্ভার-সাইড এবং ক্লায়েন্ট-সাইড API উভয়ই প্রদান করে৷
এই পদ্ধতির নেতিবাচক দিক ছিল (এবং হল) যে এটি ঘটানোর জন্য আপনাকে প্রচুর বয়লারপ্লেট কোড লিখতে হবে।
এখানেই CableReady সার্ভারে ট্রিগার হতে প্রচুর DOM অপারেশনের চারপাশে একটি বিমূর্ততা স্তর প্রদান করে সাহায্য করে। কয়েকটি উদাহরণ অন্তর্ভুক্ত:
- DOM মিউটেশন (
inner_html,insert_adjacent_html,morph, ইত্যাদি) - DOM উপাদান সম্পত্তি মিউটেশন (
add_css_class,remove_css_class,set_dataset_property, ইত্যাদি) - নির্বিচারে DOM ইভেন্ট পাঠানো হচ্ছে
- ব্রাউজার ইতিহাস ম্যানিপুলেশন
- বিজ্ঞপ্তি (যা আমরা ব্যবহার করব)
CableReady সার্ভার এবং ক্লায়েন্ট
কিভাবে CableReady তার জাদু কাজ করে? সংক্ষেপে, এটি একটি সার্ভার-সাইড এবং ক্লায়েন্ট-সাইড অংশ নিয়ে গঠিত।
সার্ভারের দিকে, মডিউল CableReady::Broadcaster আপনার আবেদনের যে কোনো অংশে এটির জন্য কল করা যেতে পারে। এটি একটি চাকরি, একটি মডেল কলব্যাক বা একটি প্লেইন কন্ট্রোলার হতে পারে। তবে প্রথমে একটি অ্যাকশন ক্যাবল চ্যানেল থাকতে হবে। CableReady এর অফিসিয়াল ডকুমেন্টেশন উদ্ধৃত করতে:
মনে রাখবেন যে visitors একটি স্ট্রিম শনাক্তকারী বলা হয় . এটি একটি বিস্তৃত দর্শক বা শুধুমাত্র আপনার চ্যানেলে সদস্যতা নেওয়া নির্দিষ্ট ক্লায়েন্টদের লক্ষ্য করতে ব্যবহার করা যেতে পারে। উদাহরণটি শেষ করতে, আমরা একটি মডেলের মধ্যে সম্প্রচারকারী মডিউল অন্তর্ভুক্ত করতে পারি এবং একটি console.log পাঠাতে পারি সাইন আপ করার পর ক্লায়েন্টের কাছে:
ক্লায়েন্টের পক্ষে, যুক্তিটি সহজ। উপরে উল্লিখিত চ্যানেলে একটি সাবস্ক্রিপশন তৈরি করুন। তারপর, এটির প্রাপ্ত হুকে, কল করুন CableReady.perform তারের উপর দিয়ে যাওয়া সমস্ত অপারেশনে:
কেবলরেডি বনাম রেলের জন্য টার্বো
সংক্ষেপে, কখন আপনার ক্যাবলরিডি ব্যবহার করা উচিত এবং কখন আপনার এটি এড়ানো উচিত?
Turbo প্রবর্তনের সাথে, ওয়েব ডেভেলপমেন্ট সম্প্রদায় সার্ভার-রেন্ডার করা প্রতিক্রিয়াশীল অ্যাপ্লিকেশনগুলি তৈরি করার জন্য একটি শক্তিশালী টুলবক্স পেয়েছে। মূলত রেলের জন্য শক্তিশালী সার্ভার-সাইড বাইন্ডিং সহ একটি ফ্রন্টএন্ড প্রযুক্তি হওয়ায়, এটি স্ট্যান্ডার্ড মডেল-ভিউ-কন্ট্রোলার (MVC) স্ট্যাকের সাথে ভালভাবে ফিট করে। সুতরাং, এটি আপনার সাধারণ অ্যাপের বেশিরভাগ প্রয়োজনীয়তা কভার করতে পারে।
অন্যদিকে ক্যাবলরেডি হল রিয়েল-টাইম রেল ডেভেলপমেন্টের সুইস আর্মি ছুরি এবং সাবধানে ব্যবহার করা উচিত। এটি একটি শক্তিশালী বিমূর্ততা যা ব্যাপকভাবে ব্যবহার করার জন্য খুব আমন্ত্রণমূলক বলে মনে হতে পারে। কিন্তু আপনি যদি কল্পনা করেন যে আপনার ডিওএম-এর প্রতিটি অংশ আপনার অ্যাপের যেকোনো অবস্থান থেকে পরিবর্তিত হতে পারে, তাহলে আপনি বুঝতে পারবেন যে এটি রেসের অবস্থা এবং হার্ড-টু-ট্র্যাক-ডাউন বাগগুলির দিকে পরিচালিত করতে পারে৷
হাতের কাছের মতো কিছু ঘটনা আছে, যদিও, যেখানে CableReady নিখুঁত অর্থবোধ করে কারণ এটি DOM-এর উপর আরও সূক্ষ্ম নিয়ন্ত্রণের অনুমতি দেয়৷
একটি সাধারণ টিএলডিআরের জন্য জিজ্ঞাসা করা হলে, আমি উত্তর দেব যে টার্বো অ্যাপ্লিকেশন বিকাশকারীদের জন্য, যখন ক্যাবলরেডি লাইব্রেরি নির্মাতাদের জন্য। কিন্তু আমরা দেখতে পাব, দুটির মধ্যে ধূসর এলাকা রয়েছে।
লক্ষ্য করা হয়েছে — রুবি অন রেল অ্যাপ্লিকেশনের জন্য সহজ বিজ্ঞপ্তি
দ্বিতীয় লাইব্রেরিটি আমরা সিস্টেম বিজ্ঞপ্তিগুলি সরবরাহ করার জন্য আবেদন করব তা হল ক্রিস অলিভারের নোটিসড জেম। এটির হৃদয়ে, এটি একটি ActiveRecord মডেলের উপর নির্মিত যা মডেল একজন প্রাপকের কাছে একটি একক বিজ্ঞপ্তি . এটি সাধারণ মেটাডেটা ধারণ করে, যেমন:
- কাকে (প্রাপক) একটি বিজ্ঞপ্তি পাঠানো হয়েছিল
- যখন বিজ্ঞপ্তিটি পড়া হয়েছিল
- যেকোন প্যারামিটারের সাথে বিজ্ঞপ্তিটি যুক্ত (সাধারণত অন্য মডেলের রেফারেন্স)
আপনি যদি ActiveStorage/ActionText মেটা-টেবিলগুলি কীভাবে কাজ করে তার সাথে পরিচিত হন, তাহলে এটি খুবই অনুরূপ৷
এর সংলগ্ন, নোটিসড POROs নিয়োগ করে (Plain Old Ruby Objects , যেমন, রেল বা অন্যান্য ফ্রেমওয়ার্কের সাথে কোনো সংযোগ ছাড়াই বস্তু), যা প্রকৃত বিজ্ঞপ্তির জন্য ব্লুপ্রিন্ট হিসেবে কাজ করে। এগুলিকে, কিছুটা বিভ্রান্তিকর, বিজ্ঞপ্তিও বলা হয় এবং কীভাবে সেগুলিকে রেন্ডার এবং বিতরণ করা যায় সে সম্পর্কে যুক্তি বহন করে৷ এখানে README থেকে একটি উদাহরণ দেওয়া হল:
আমরা শীঘ্রই কর্মক্ষেত্রে এটি দেখতে হবে. বিশেষ আগ্রহের বিষয় হল deliver_by আমন্ত্রণ, কারণ তারা নির্ধারণ করে যে এই বিজ্ঞপ্তিটি কোন বিতরণ পদ্ধতি ব্যবহার করা উচিত:
deliver_by :databaseপরে অ্যাক্সেসের জন্য একটি বিজ্ঞপ্তি রেকর্ড (উপরে উল্লিখিত মডেলের) সংরক্ষণ করেdeliver_by :action_cableএটি একটি সংজ্ঞায়িত ActionCable চ্যানেল এবং স্ট্রিমের মাধ্যমে পাঠায় (ডিফল্টNoticed::NotificationChannel)deliver_by :emailবিজ্ঞপ্তি পাঠাতে ব্যবহৃত একটি মেইলার নির্দিষ্ট করে। উদাহরণটি দেখায় যে প্রাপক(দের) সেট করা যেকোন পছন্দগুলিকে কীভাবে ফ্যাক্টর করতে হয়।
এই নিবন্ধের বাকি অংশের জন্য আমাদের লক্ষ্য হল একটি কাস্টম ডেলিভারি পদ্ধতি প্রয়োগ করা যা আমাদের সিস্টেম বিজ্ঞপ্তি পাঠাবে।
একটি কাস্টম ডেলিভারি পদ্ধতি:বিজ্ঞপ্তি API এর মাধ্যমে সিস্টেম বিজ্ঞপ্তিগুলি
আমরা এটি করার আগে, আসুন একটি নতুন রেল অ্যাপ্লিকেশন তৈরি করে মাটি পরিষ্কার করি। যেহেতু এইভাবে ক্যাবলরেডির সাথে একীভূত করা সহজ, আমি esbuild বেছে নিয়েছি importmaps এর উপর জাভাস্ক্রিপ্ট বিকল্প :
দ্রষ্টব্য: লেখার সময়, বর্তমান রেল সংস্করণটি হল 7.0.4৷ আপনার কাছে একটি বিদ্যমান রেল অ্যাপ্লিকেশন থাকলে, আপনি পরবর্তী ধাপটি এড়িয়ে যেতে পারেন, তবে নিশ্চিত করুন যে আপনার কাছে বিজ্ঞপ্তি প্রাপক হিসাবে কাজ করার জন্য একটি ব্যবহারকারী মডেল বা অনুরূপ ধারণা রয়েছে৷ .
1. প্রাপকদের প্রস্তুত করুন
লক্ষ্য করা হয়েছে প্রাপক হিসাবে কাজ করার জন্য একটি ব্যবহারকারী মডেল প্রয়োজন, তাই সংক্ষিপ্ত হতে, ডিভাইসে টানুন এবং একটি ব্যবহারকারী মডেল তৈরি করুন৷
পরে, রেল কনসোল খুলুন এবং একটি নমুনা ব্যবহারকারী তৈরি করুন:
2. লক্ষ্য করা যোগ করুন
এর পরে, আসুন আমাদের বান্ডেলে Noticed যোগ করি এবং ডাটাবেস মডেল তৈরি করি।
আমরা যেমন বলেছি, db:migrate চালান এবং পলিমরফিক has_many যোগ করুন আমাদের ব্যবহারকারী মডেলের সাথে অ্যাসোসিয়েশন:
আমরা এটি পরীক্ষা করার আগে চূড়ান্ত অংশটি হল একটি ব্লুপ্রিন্ট তৈরি করা PORO:
আমরা এটিকে কিছুটা পরিবর্তন করি যাতে এটি শুধুমাত্র ডাটাবেস বিতরণ পদ্ধতি এবং মুহূর্তের জন্য একটি স্থানধারক বার্তা ব্যবহার করে। আপনি সাধারণত এখানে প্রয়োজনীয় প্যারাম যোগ করবেন, যেমন একটি মডেল আইডি, বার্তাটি তৈরি করতে এবং লিঙ্ক করার জন্য URL - বিস্তারিত জানার জন্য নোটিসড README দেখুন৷
শুধুমাত্র Rails কনসোল ব্যবহার করে, আমরা প্রদর্শন করতে পারি কিভাবে এখন এই PORO এর উপর ভিত্তি করে একটি বিজ্ঞপ্তি প্রদান করতে হয়:
আমরা দেখতে পাচ্ছি, নোটিসড একটি ডাটাবেস সন্নিবেশ সঞ্চালন করে, তাই এখন আমরা সমস্ত Notifications ধরতে পারি একটি নির্দিষ্ট ব্যবহারকারীর জন্য:
বর্তমান ব্যবহারকারীর জন্য বিতরণ করা সমস্ত বিজ্ঞপ্তিগুলিকে তালিকাভুক্ত করে একটি সাধারণ সূচক দৃশ্য তৈরি করার জন্য এটি আমাদের জন্য যথেষ্ট:
অ্যাপটি bin/dev দিয়ে স্পিন আপ করার পর , আমরা লগ ইন করতে এবং ব্রাউজ করতে পারি http://localhost:3000/notifications:

3. CableReady ইনস্টল করা হচ্ছে
CableReady ব্যবহার করতে, আমাদের এটি ইনস্টল করতে হবে। ভাগ্যক্রমে, এটি দ্রুত সম্পন্ন হয়:
চলুন একটি NotificationChannel তৈরি করি আমাদের বার্তা প্রদান করতে:
এটি সমস্ত অনুপস্থিত ActionCable (JavaScript) নির্ভরতা যোগ করবে এবং সংশ্লিষ্ট চ্যানেল ফাইলগুলিকে স্ক্যাফোল্ড করবে, বিশেষ করে app/channels/notification_channel.rb এবং app/javascript/channels/notification_channel.js .
সার্ভার-সাইড চ্যানেলের জন্য, আমরা Noticed::NotificationChannel থেকে উত্তরাধিকার সূত্রে প্রাপ্ত :
আমরা চালিয়ে যাওয়ার আগে, আমাদের নিশ্চিত করতে হবে যে আমাদের ActionCable ডিভাইস ব্যবহারকারীদের জন্য প্রমাণীকৃত। আমি এখানে যে সম্পর্কে বিস্তারিত যেতে হবে না. প্রয়োজনীয় বয়লারপ্লেট দেখতে এইরকম:
অন্যান্য বিকল্পের জন্য StimulusReflex ডক্স দেখুন।
ক্লায়েন্টের দিকে, আমাদের উপরে উল্লিখিত সেটআপ কোডের ক্ষুদ্র অংশ যোগ করতে হবে:
দ্রষ্টব্য: ActionCable কাজ করার জন্য Redis প্রয়োজন, তাই এই নিবন্ধের বাকি অংশ ধরে নেয় যে আপনার একটি স্থানীয় সার্ভার চলছে।
4. ডেলিভারি পদ্ধতি বাস্তবায়ন
সিস্টেম বিজ্ঞপ্তি সম্প্রচার করতে, আসুন একটি নতুন বিতরণ পদ্ধতি তৈরি করি:
ভারা শ্রেণীটি দেখতে এইরকম:
আসুন আমরা কীভাবে আমাদের deliver কল্পনা করি খসড়া তৈরি করে চলুন কাজ করার পদ্ধতি।
আমরা channel ধার করেছি বিল্ট-ইন ActionCable বিতরণ পদ্ধতি থেকে আংশিক পদ্ধতি। এটি আমাদের একটি ক্লাস পদ্ধতি বিকল্পের মাধ্যমে একটি চ্যানেলে পাস করতে দেয়। অন্যথায়, এটি প্রদত্ত Noticed::NotificationsChannel-এ ফিরে আসে .
তারপর আমরা CableReady এর notification ব্যবহার করি প্রাপকের কাছে সংশ্লিষ্ট দৃষ্টান্ত সম্প্রচার করার পদ্ধতি।
এটিকে কার্যকর করতে, আমাদের এটিকে আমাদের বিজ্ঞপ্তি PORO:
এর সাথে সংযুক্ত করতে হবে৷5. এটিকে কাজে লাগানো
এখন যা করা বাকি আছে তা চেষ্টা করে দেখুন। আমরা সহজভাবে রেল কনসোল থেকে এটি আবার চালাতে পারি:
ধরে নিচ্ছি আপনি এখনও লগ ইন আছেন, ব্রাউজার প্রথমে আপনাকে অ্যাপের তরফে বিজ্ঞপ্তি পাওয়ার অনুমতি চাইবে:

একবার আপনি এটি নিশ্চিত করলে, আপনি আপনার ব্রাউজার থেকে এই সুন্দর পপ-আপ বিজ্ঞপ্তি পাবেন:

র্যাপিং আপ
CableReady এবং Noticed-এর মাধ্যমে একটি দ্রুত লেন সফর করে, আমরা দেখিয়েছি কিভাবে আপনার অ্যাপে একটি নেটিভ ব্রাউজার API একীভূত করা যায়। ফলাফল আপনার ব্যবহারকারীদের সিস্টেম বিজ্ঞপ্তি প্রদান করার একটি সহজ, সুসঙ্গত উপায়।
এই ব্যবহার কেসটি আপনার ব্যবহারের ক্ষেত্রে CableReady মিশ্রিত করা কতটা সহজ তা বোঝানোর জন্যও বোঝানো হয়েছে। আপনি যদি এক ধাপ এগিয়ে চিন্তা করেন, একটি লাইব্রেরিতে খসড়া বিতরণ পদ্ধতিটি ডিকপল করা কঠিন নয়৷
আমি আশা করি এটি আপনাকে অনুপ্রাণিত করবে আপনার অ্যাপে উল্লম্ব প্রতিক্রিয়াশীল সমস্যা ডোমেনগুলির প্রকাশগুলি সন্ধান করতে এবং CableReady কে চেষ্টা করে দেখতে৷
আমার নতুন বই Advanced CableReady তুলে নিয়ে আরও পড়ুন৷
৷কুপন কোড APPSIGNAL-PROMO ব্যবহার করুন এবং $10 বাঁচান!
শুভ কোডিং!
পি.এস. আপনি যদি রুবি ম্যাজিক পোস্টগুলি প্রেস থেকে বের হওয়ার সাথে সাথে পড়তে চান তবে আমাদের রুবি ম্যাজিক নিউজলেটারে সাবস্ক্রাইব করুন এবং একটি পোস্ট মিস করবেন না!