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

রেলে রুবির জন্য লাইটস্ট্যাক:ওয়ান-স্টপ ডেটা ম্যানেজমেন্ট সলিউশন

পোস্টের এই সিরিজে, আমরা LiteStack দেখব , একটি ওয়ান-স্টপ-শপ সমাধান যা একটি একক মেশিনে আপনার সমস্ত উত্পাদন ডেটা হোস্ট এবং প্রক্রিয়া করে। LiteStack (নাম থেকে বোঝা যায়) প্রদান করতে SQLite ব্যবহার করে:

  • LiteDB ব্যবহার করে একটি ডাটাবেস অ্যাডাপ্টার
  • একটি ActiveJob ব্যাকএন্ড (LiteJob )
  • একটি ActionCable ব্যাকএন্ড (LiteCable )
  • একটি ActiveSupport::Cache store (LiteCache )

এই প্রথম পোস্টে, আমরা LiteStack-এর মৌলিক বিষয়গুলি উপস্থাপন করব এবং একটি উদাহরণ Rails অ্যাপ্লিকেশন সেট আপ করব৷

চলুন শুরু করা যাক!

SQLite-এর একটি ভূমিকা

SQLite নিজেই কয়েক দশক ধরে অনেক শিল্পের এম্বেডেড ডাটাবেস হয়েছে। উদাহরণস্বরূপ, এটি নেটিভ অ্যাপ ডেভেলপমেন্ট, টেস্টিং এনভায়রনমেন্ট, ক্যাশিং এবং অন্যান্য ক্ষেত্রে ব্যাপকভাবে ব্যবহৃত হয়।

সম্প্রতি, যদিও, এটি অনেক পরীক্ষা-নিরীক্ষা এবং এক্সটেনশনকে আকর্ষণ করেছে। সবচেয়ে জনপ্রিয় এক্সটেনশনগুলির মধ্যে একটি হল Litestream, যা S3-সামঞ্জস্যপূর্ণ বালতিতে স্ট্রিম পরিবর্তনগুলি পুনরুদ্ধার করতে পারে। এর মানে হল আপনি খুব সস্তা দামে আপনার প্রোডাকশন ডাটাবেসের একটি রেপ্লিকা পাবেন এবং যেকোন সময় ব্যর্থতা থেকে পুনরুদ্ধার করতে পারবেন।

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

এটি করার জন্য, আমাদের একটি উদাহরণ অ্যাপ্লিকেশন প্রয়োজন যা সম্ভাব্য অসুবিধাগুলিকে পৃষ্ঠ করার জন্য যথেষ্ট জটিল, কিন্তু এই সিরিজের জন্য যথেষ্ট সহজ।

আমাদের উদাহরণ রেল অ্যাপ্লিকেশন

আমরা একটি অ্যাপ লিখব যা replicate.com-এ StableDiffusion ব্যবহার করে বাচ্চাদের অঙ্কনকে রূপান্তরিত করে।

উদাহরণ স্বরূপ, এখানে আমার মেয়ের আঁকা একটি চতুর টেডি বিয়ার রয়েছে, যেখানে কয়েকটি স্টেবলডিফিউশন ব্যাখ্যা রয়েছে:

রেলে রুবির জন্য লাইটস্ট্যাক:ওয়ান-স্টপ ডেটা ম্যানেজমেন্ট সলিউশন

একটি মোটামুটি স্কেচ হিসাবে, আমাদের অ্যাপটি নিম্নলিখিত পদক্ষেপগুলি কভার করবে:

  1. ব্যবহারকারী একটি পাঠ্য প্রম্পট সহ একটি চিত্র আপলোড করে (আমরা এখানে কিছু উন্নত SQLite কৌশল দেখাব)।
  2. ব্যবহারকারী একটি ইমেজ স্টাইল বেছে নেয় (যেমন, "কার্টুন", "তেল পেইন্টিং", "ফটোরিয়ালিস্টিক", "3D রেন্ডারিং")।
  3. প্রসেসিংটি পটভূমিতে হয় (এটি একটি LiteJob শুরু করে -চালিত কাজ)।
  4. প্রসেসিং চলাকালীন, আমরা একটি স্থানধারক চিত্র দেখাই এবং সার্ভার দ্বারা পাঠানো লগগুলি আপডেট করি৷ একবার সম্পন্ন হলে, আমরা প্রকৃত চিত্র দেখানোর জন্য এটি আপডেট করি। এটি আমাদেরকে LiteCable অন্বেষণ করতে দেয় যেহেতু আমরা টার্বো স্ট্রিমের মাধ্যমে ইমেজ প্রতিস্থাপন করি।
  5. আমরা ছবির পূর্বাভাস সংরক্ষণ করি।
  6. আমরা LiteCache ব্যবহার করি গণনাগতভাবে ব্যয়বহুল ভিউ মোড়ানো।

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

আমরা skAItch নামে একটি নতুন Rails অ্যাপ তৈরি করে শুরু করি , আমাদের জাভাস্ক্রিপ্ট বান্ডলার হিসাবে esbuild এবং CSS প্রিপ্রসেসর হিসাবে SASS ব্যবহার করে:

 

LiteStack ইনস্টল করুন

এরপরে, আমরা শিপড জেনারেটর ব্যবহার করে LiteStack ইনস্টল করি:

 

এটি সম্পন্ন হওয়ার পরে, আমরা সেটআপ সম্পূর্ণ করি এবং বিকাশ সার্ভার শুরু করি:

 

প্রমাণিকরণ এবং ভাড়াটে

পরবর্তীকালে, আমাদের ব্যবহারকারীদের তাদের সাথে প্রম্পট যুক্ত করার জন্য তাদের প্রমাণীকরণের একটি উপায় প্রয়োজন। Devise এর মত একটি দায়িত্বশীল ব্যবহার করার পরিবর্তে, আমি একটি ভিন্ন পদ্ধতি ব্যবহার করতে বেছে নিয়েছি। প্রমাণীকরণ-শূন্য মণি নমনীয়ভাবে একটি প্রমাণীকরণ সিস্টেম তৈরি করতে পারে, এটিকে ইঞ্জিন হিসাবে অন্তর্ভুক্ত করার বিপরীতে। সুবিধামত, এটি বিকল্পগুলির সাথে আসে যেমন:

  • টোকেন দ্বারা প্রমাণীকরণ (এপিআইগুলির জন্য)
  • টু-ফ্যাক্টর অথ
  • মাল্টিটেনেন্সি
  • হার সীমাবদ্ধ
  • একটি OmniAuth ইন্টারফেস
  • পাসওয়ার্ডবিহীন প্রমাণীকরণ

আমি --tenantable যোগ করতে বেছে নিয়েছি বিকল্প কারণ আপনার ডাটাবেস রেকর্ডগুলিকে অ্যাকাউন্টগুলিতে স্বয়ংক্রিয়ভাবে স্কোপ করা সর্বদা একটি ভাল ধারণা। প্রমাণীকরণ-শূন্য এটি AccountScoped দিয়ে প্রদান করে মডেল উদ্বেগ।

 

ডাটাবেস বীজের মাধ্যমে প্রথম ব্যবহারকারী যোগ করা যাক:

 

প্রম্পট স্ক্যাফোল্ড

এখন আমাদের প্রকৃত অ্যাপ্লিকেশন যুক্তি লিখতে শুরু করার সময়। আমরা আমাদের অ্যাপের কেন্দ্রীয় মডেল সংজ্ঞায়িত করে শুরু করি:Prompt .

আমরা চাই যে আমাদের প্রম্পটে একটি শিরোনাম, একটি বিবরণ এবং এটি তৈরি করা অ্যাকাউন্টের একটি রেফারেন্স থাকুক। উপরন্তু, SQLite এর "ফাইল সিস্টেম" ক্ষমতা পরীক্ষা করার জন্য, আমরা চাই যে এটি প্রম্পট ইমেজটিকে বাইনারি আকারে সংরক্ষণ করুক:

 

একটি prompts সম্পদ এন্ট্রিও config/routes.rb-এ যোগ করা হয়েছে . মনে রাখবেন যে প্রমাণীকরণ-শূন্য একটি before_action যোগ করে ব্যবহারকারীকে ApplicationController এ প্রমাণীকরণ করা হচ্ছে ডিফল্টরূপে।

 

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

 

মাল্টিটেন্যান্সি সক্ষম করার চূড়ান্ত পদক্ষেপ হিসাবে, আমাদের প্রম্পটটিকে একটি অ্যাকাউন্টের সাথে সংযুক্ত করতে হবে যখন এটি তৈরি করা হয়। আমরা এটি PromptsController এ করি :

 

আমাদের রেল অ্যাপ্লিকেশন Replicate.com-এ সংযুক্ত করা হচ্ছে

Replicate.com উচ্চ-পারফরম্যান্স গ্রাফিক্স কার্ডে AI পূর্বাভাস চালানোর জন্য একটি অগ্রণী প্ল্যাটফর্ম। এটিতে ভবিষ্যদ্বাণী, ট্রেন এবং স্টোর মডেল ইত্যাদি তৈরি করার জন্য একটি API বৈশিষ্ট্য রয়েছে। এটি ব্যবহার করতে, আপনাকে https://replicate.com/account/api-tokens থেকে একটি API টোকেন পেতে হবে।

দ্রষ্টব্য: প্রতিলিপিতে চলমান পূর্বাভাস একটি চার্জ সাপেক্ষে৷

সৌভাগ্যবশত আমাদের জন্য, এমন অফিসিয়াল এবং আনঅফিসিয়াল ক্লায়েন্ট আছে যারা API এর সাথে ইন্টারফেস করে। এরকম একটি মোড়ক হল রেপ্লিকেট-রেল রত্ন, যা আমরা এখন ইনস্টল করব:

 
 

আমাদের API কী নিরাপদে সংরক্ষণ করতে, আমরা Rails credentials ব্যবহার করতে যাচ্ছি:

 
 

এই ফাইলটি সম্পাদনা এবং সংরক্ষণ করা আপনার শংসাপত্রগুলিকে এনক্রিপ্ট করবে, এবং এটি শুধুমাত্র সঠিক RAILS_MASTER_KEY প্রদান করে খোলা যাবে .

এখন, আমরা এটি ব্যবহার করতে হবে. replicate-rails' README-এ যেমন পরামর্শ দেওয়া হয়েছে, আমরা একটি ইনিশিয়ালাইজারে প্রতিলিপির বিরুদ্ধে প্রমাণীকরণ করি। আমরা একটি ওয়েবহুক হ্যান্ডলারকেও সংজ্ঞায়িত করি যা (আমাদের ক্ষেত্রে) একই ফাইলে রাখা একটি ক্লাস। মনে রাখবেন আমি একটি binding.irb যোগ করেছি আমাদের কার্যকারিতার প্রথম পরীক্ষার জন্য এখানে ব্রেকপয়েন্ট।

 

রেপ্লিকেট-রেলগুলি একটি ডিফল্ট ওয়েবহুক কন্ট্রোলারও পাঠায়, যা উপরের হ্যান্ডলারকে কল করে। আমাদের শুধুমাত্র এটিকে আমাদের config/routes.rb এ মাউন্ট করতে হবে :

 

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

আপনাকে অবশ্য রেলকে বলতে হবে যে এটি আপনার টানেলের URL শুনতে পারে। এটি সক্ষম করতে, এটিকে allowed_hosts এ যোগ করুন config/application.rb-এ :

 

একটি ভবিষ্যদ্বাণী চালানো

এখন আমরা একটি ভবিষ্যদ্বাণী তৈরি পরীক্ষা করব। শুধুমাত্র অনুপস্থিত বিট হল এটিকে আমাদের PromptsController এ সংযুক্ত করা . সাধারণ কর্মপ্রবাহ নিম্নরূপ:

  1. আমরা একটি মডেল পুনরুদ্ধার করি (আমাদের ক্ষেত্রে, stable-diffusion-img2img মডেল) প্রতিলিপি থেকে।
  2. এর বিরুদ্ধে ভবিষ্যদ্বাণী চালানোর জন্য আমরা একটি নির্দিষ্ট সংস্করণ (আমাদের ক্ষেত্রে, সর্বশেষ সংস্করণ) ধরি৷
  3. আমরা ভবিষ্যদ্বাণী চালাই, নির্দিষ্ট করে:
    • একটি টেক্সট প্রম্পট ইমেজ বর্ণনা করে (আমাদের ক্ষেত্রে, আমাদের প্রম্পটের শিরোনাম)।
    • একটি চিত্র প্রম্পট যা আমাদের একটি বেস64-এনকোডেড ডেটা URL হিসাবে প্রদান করতে হবে৷
    • পূর্বাভাস সম্পূর্ণ হলে পিং করার জন্য একটি ওয়েবহুক (আমরা এটিকে প্রতিলিপি-রেল দ্বারা প্রদত্ত ওয়েবহুক রুটে নির্দেশ করি)।
 

আপনি যদি https://YOUR_NGROK_URL/prompts/new এ যান এবং একটি শিরোনাম সহ একটি ছবি আপলোড করেন, তাহলে আপনি এখন একটি ভবিষ্যদ্বাণী ট্রিগার করবেন৷ হয়ে গেলে, এটি প্রদত্ত ওয়েবহুকের মাধ্যমে আবার কল করবে। কারণ আমরা একটি binding.irb সেট করেছি ব্রেকপয়েন্ট সেখানে, কন্ট্রোলার অ্যাকশনটি একটি REPL-এ থেমে যায় এবং আমরা চারপাশে ঘুরে দেখতে পারি:

 

আমরা দেখতে পাচ্ছি, ইমেজ-টু-ইমেজ প্রজন্মের আমাদের প্রথম দৌড় সফল হয়েছে। ভবিষ্যদ্বাণী মডেল তৈরি করা চিত্রটিতে একটি URL প্রদান করে, যা আমরা স্থানীয়ভাবে সংরক্ষণ করতে চাই (সেগুলি পর্যায়ক্রমে প্রতিলিপিতে মুছে ফেলা হয়)। আমরা পরের বার এটি ঘনিষ্ঠভাবে দেখব৷

পরবর্তী:LiteDB ডিপ ডাইভ

এই উদ্বোধনী পোস্টে, আমরা একটি একক মেশিনে আপনার Rails অ্যাপের সমস্ত উপাদান হোস্ট করার জন্য একটি আকর্ষণীয় বিকল্প হিসাবে LiteStack পরিবেশকে উপস্থাপন করেছি। আমরা আরও একটি উদাহরণ অ্যাপ সেট আপ করেছি যা AI ইমেজ তৈরির জন্য Replicate.com-এর সাথে কথা বলে৷

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

ততক্ষণ পর্যন্ত, খুশি কোডিং!

পি.এস. আপনি যদি রুবি ম্যাজিক পোস্টগুলি প্রেস থেকে বের হওয়ার সাথে সাথে পড়তে চান তবে আমাদের রুবি ম্যাজিক নিউজলেটারে সাবস্ক্রাইব করুন এবং একটি পোস্ট মিস করবেন না!


  1. C ভাষায় প্রদত্ত সূচীতে লিঙ্কযুক্ত তালিকার নোডগুলি মুদ্রণ করুন

  2. HTML DOM ইনপুট পাসওয়ার্ড প্যাটার্ন বৈশিষ্ট্য

  3. পাইথন - লাইন প্লট ব্যবহার করে একাধিক কলাম সহ একটি টাইম সিরিজ প্লট তৈরি করুন

  4. কিভাবে অ্যান্ড্রয়েড অ্যাপ্লিকেশন প্রথম ইনস্টলেশন তারিখ পেতে?