Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

रूबी ऑन रेल्स के लिए लाइटस्टैक:वन-स्टॉप डेटा प्रबंधन समाधान

<पी> पोस्ट की इस श्रृंखला में, हम लाइटस्टैक को देखेंगे , एक वन-स्टॉप-शॉप समाधान जो आपके सभी उत्पादन डेटा को एक ही मशीन पर होस्ट और संसाधित करता है। लाइटस्टैक (जैसा कि नाम से पता चलता है) प्रदान करने के लिए SQLite का उपयोग करता है:

  • LiteDB का उपयोग करने वाला एक डेटाबेस एडाप्टर
  • एक ActiveJob बैकएंड (LiteJob )
  • एक ActionCable बैकएंड (LiteCable )
  • एक ActiveSupport::Cache स्टोर (LiteCache )
<पी> इस पहली पोस्ट में, हम लाइटस्टैक की मूल बातें पेश करेंगे और एक उदाहरण रेल एप्लिकेशन स्थापित करेंगे।

<पी> आइए शुरू करें!

SQLite का एक परिचय

<पी> SQLite स्वयं दशकों से कई उद्योगों का एम्बेडेड डेटाबेस रहा है। उदाहरण के लिए, इसका व्यापक रूप से देशी ऐप विकास, परीक्षण परिवेश, कैशिंग और अन्य में उपयोग किया जाता है।

<पी> हालाँकि, हाल ही में इसने बहुत सारे प्रयोग और विस्तार को आकर्षित किया है। सबसे लोकप्रिय एक्सटेंशन में से एक लाइटस्ट्रीम है, जो S3-संगत बकेट में स्ट्रीम परिवर्तनों को पुनर्प्राप्त कर सकता है। इसका मतलब है कि आपको अपने उत्पादन डेटाबेस की प्रतिकृति बहुत सस्ते मूल्य पर मिलती है और आप किसी भी समय विफलता से उबर सकते हैं।

<पी> संयोग से, इसने आपके रेल ऐप के लिए उत्पादन डेटाबेस के रूप में SQLite का उपयोग करना एक व्यवहार्य विकल्प बना दिया है। लाइटस्टैक जैसे पूर्ण विकसित विकास स्टैक के साथ मिलकर, यह एकल मशीन पर होस्ट किए गए ऐप्स को वास्तविकता बनाने का वादा करता है। हम यहां इस परिकल्पना का परीक्षण करने और रास्ते में आने वाली किसी भी बाधा को इंगित करने के लिए हैं।

<पी> ऐसा करने के लिए, हमें एक उदाहरण ऐप की आवश्यकता है जो संभावित कठिनाइयों को सामने लाने के लिए काफी जटिल हो, लेकिन इस श्रृंखला में फिट होने के लिए काफी सरल हो।

हमारा उदाहरण रेल एप्लिकेशन

<पी> हम एक ऐसा ऐप लिखेंगे जो replication.com पर StableDifuse का उपयोग करके बच्चों के चित्र को बदल देगा।

<पी> उदाहरण के तौर पर, यहां मेरी बेटी द्वारा बनाया गया एक प्यारा टेडी बियर है, जिसमें कुछ स्टेबलडिफ्यूजन व्याख्याएं हैं:

<पी> रूबी ऑन रेल्स के लिए लाइटस्टैक:वन-स्टॉप डेटा प्रबंधन समाधान

<पी> एक मोटे स्केच के रूप में, हमारा ऐप निम्नलिखित चरणों को कवर करेगा:

  1. उपयोगकर्ता टेक्स्ट प्रॉम्प्ट के साथ एक छवि अपलोड करता है (हम यहां कुछ उन्नत SQLite तकनीक दिखाएंगे)।
  2. उपयोगकर्ता एक छवि शैली चुनता है (उदाहरण के लिए, "कार्टून", "ऑयल पेंटिंग", "फोटोरियलिस्टिक", "3डी रेंडरिंग")।
  3. प्रसंस्करण पृष्ठभूमि में होता है (यह एक LiteJob शुरू करता है -संचालित नौकरी).
  4. जब प्रोसेसिंग चल रही होती है, हम एक प्लेसहोल्डर छवि दिखाते हैं और सर्वर द्वारा भेजे गए लॉग को अपडेट करते हैं। एक बार पूरा हो जाने पर, हम वास्तविक छवि दिखाने के लिए इसे अपडेट करते हैं। यह हमें LiteCable का पता लगाने की अनुमति देता है जैसे कि हम छवि को टर्बो स्ट्रीम के माध्यम से प्रतिस्थापित करते हैं।
  5. हम छवि पूर्वानुमान संग्रहीत करते हैं।
  6. हम LiteCache का उपयोग करते हैं कम्प्यूटेशनल रूप से महंगे दृश्यों को लपेटने के लिए।
<पी> ये चरण इस श्रृंखला के लिए एक मचान प्रदान करते हैं। हालाँकि, इस पोस्ट का शेष भाग ऐप स्थापित करने से संबंधित होगा।

<पी> हम skAItch नामक एक नया रेल ऐप बनाकर शुरुआत करते हैं , हमारे जावास्क्रिप्ट बंडलर के रूप में esbuild और CSS प्रीप्रोसेसर के रूप में SASS का उपयोग करना:

 

लाइटस्टैक स्थापित करें

<पी> इसके बाद, हम भेजे गए जनरेटर का उपयोग करके लाइटस्टैक स्थापित करते हैं:

 <पी> यह हो जाने के बाद, हम सेटअप पूरा करते हैं और विकास सर्वर शुरू करते हैं:

 

प्रमाणीकरण और किरायेदार

<पी> इसके बाद, हमें अपने उपयोगकर्ताओं को उनके साथ संकेतों को जोड़ने के लिए प्रमाणित करने का एक तरीका चाहिए। डेविस जैसे पदधारी का उपयोग करने के बजाय, मैंने एक अलग दृष्टिकोण का उपयोग करना चुना। प्रमाणीकरण-शून्य मणि एक इंजन के रूप में शामिल करने के विपरीत, लचीले ढंग से एक प्रमाणीकरण प्रणाली उत्पन्न कर सकता है। सुविधाजनक रूप से, यह इस तरह के विकल्पों के साथ आता है:

  • टोकन द्वारा प्रमाणीकरण (एपीआई के लिए)
  • दो-कारक प्रमाणीकरण
  • बहुकिरायेदारी
  • दर सीमित करना
  • एक ओमनीऑथ इंटरफ़ेस
  • पासवर्ड रहित प्रमाणीकरण
<पी> मैंने --tenantable जोड़ना चुना है विकल्प क्योंकि अपने डेटाबेस रिकॉर्ड को स्वचालित रूप से खातों तक सीमित करना हमेशा एक अच्छा विचार है। प्रमाणीकरण-शून्य इसे AccountScoped प्रदान करता है मॉडल चिंता.

 <पी> आइए डेटाबेस सीड्स के माध्यम से पहला उपयोगकर्ता जोड़ें:

 

प्रॉम्प्ट स्कैफोल्ड

<पी> अब हमारे वास्तविक एप्लिकेशन लॉजिक को लिखना शुरू करने का समय आ गया है। हम अपने ऐप के केंद्रीय मॉडल को परिभाषित करके शुरू करते हैं:Prompt .

<पी> हम चाहते हैं कि हमारे प्रॉम्प्ट में एक शीर्षक, एक विवरण और उस खाते का संदर्भ हो जिसने इसे बनाया है। इसके अलावा, SQLite की "फ़ाइल सिस्टम" क्षमताओं का परीक्षण करने के लिए, हम चाहेंगे कि यह प्रॉम्प्ट छवि को बाइनरी रूप में संग्रहीत करे:

 <पी> ए prompts संसाधन प्रविष्टि को config/routes.rb में भी जोड़ा गया है . ध्यान दें कि प्रमाणीकरण-शून्य एक before_action जोड़ता है उपयोगकर्ता को ApplicationController पर प्रमाणित करना डिफ़ॉल्ट रूप से.

 <पी> इसके अलावा, हम AccountScoped शामिल करते हैं हमारे प्रॉम्प्ट मॉडल में चिंता, जो हमें लॉग-इन खाते द्वारा संग्रहीत रिकॉर्ड का दायरा बढ़ाने की अनुमति देती है। हम यह भी सत्यापित करते हैं कि एक त्वरित शीर्षक और छवि मौजूद है।

 <पी> मल्टीटेनेंसी को सक्षम करने के अंतिम चरण के रूप में, खाता बनने पर हमें प्रॉम्प्ट को उससे कनेक्ट करना होगा। हम इसे PromptsController में करते हैं :

 

हमारे रेल एप्लिकेशन को Reploite.com से कनेक्ट करना

<पी> Replication.com उच्च-प्रदर्शन ग्राफिक्स कार्ड पर AI पूर्वानुमान चलाने के लिए एक अग्रणी मंच है। इसमें भविष्यवाणियां बनाने, मॉडल को प्रशिक्षित करने और स्टोर करने आदि के लिए एक एपीआई की सुविधा है। इसका उपयोग करने के लिए, आपको https://replication.com/account/api-tokens से एक एपीआई टोकन प्राप्त करना होगा।

<पी> ध्यान दें: रेप्लिकेट पर पूर्वानुमान चलाने पर शुल्क लगता है।

<पी> हमारे लिए सौभाग्य से, ऐसे आधिकारिक और अनौपचारिक ग्राहक हैं जो एपीआई के साथ इंटरफेस करते हैं। ऐसा ही एक रैपर रेप्लिकेट-रेल रत्न है, जिसे हम अभी स्थापित करेंगे:

 
 <पी> अपनी एपीआई कुंजी को सुरक्षित रूप से संग्रहीत करने के लिए, हम रेल क्रेडेंशियल्स का उपयोग करने जा रहे हैं:

 
 <पी> इस फ़ाइल को संपादित करने और सहेजने से आपके क्रेडेंशियल एन्क्रिप्ट हो जाएंगे, और इसे केवल सही RAILS_MASTER_KEY प्रदान करके ही खोला जा सकता है। .

<पी> अब, हमें इसे उपयोग में लाना होगा। जैसा कि रेप्लिकेट-रेल के रीडमी में सुझाव दिया गया है, हम इनिशियलाइज़र में रेप्लिकेट के विरुद्ध प्रमाणित करते हैं। हम एक वेबहुक हैंडलर को भी परिभाषित करते हैं जो (हमारे मामले में) एक ही फ़ाइल में डाला गया एक वर्ग है। ध्यान दें कि मैंने एक binding.irb जोड़ा है हमारी कार्यक्षमता के पहले परीक्षण के लिए यहां ब्रेकपॉइंट।

 <पी> रेप्लिकेट-रेल एक डिफ़ॉल्ट वेबहुक नियंत्रक भी शिप करता है, जो उपरोक्त हैंडलर को कॉल करता है। हमें इसे केवल अपने config/routes.rb में माउंट करना होगा :

 <पी> वेबहुक का स्थानीय स्तर पर परीक्षण करने के लिए, आपको एक सुरंग स्थापित करनी होगी, उदाहरण के लिए, एनग्रोक के साथ। इसे स्थापित करने के चरण इस आलेख के दायरे से परे हैं, लेकिन यह बहुत सरल है। कृपया Ngrok दस्तावेज़ देखें।

<पी> हालाँकि, आपको रेल्स को यह बताना होगा कि वह आपकी सुरंग के यूआरएल को सुन सकता है। इसे सक्षम करने के लिए, इसे allowed_hosts में जोड़ें config/application.rb में :

 

एक भविष्यवाणी चलाना

<पी> अब हम एक भविष्यवाणी बनाने का परीक्षण करेंगे। एकमात्र कमी इसे हमारे PromptsController में जोड़ने की है . सामान्य वर्कफ़्लो इस प्रकार है:

  1. हम एक मॉडल पुनर्प्राप्त करते हैं (हमारे मामले में, stable-diffusion-img2img मॉडल) रिप्लिकेट से।
  2. भविष्यवाणी चलाने के लिए हम एक विशिष्ट संस्करण (हमारे मामले में, नवीनतम संस्करण) लेते हैं।
  3. हम यह निर्दिष्ट करते हुए भविष्यवाणी चलाते हैं:
    • छवि का वर्णन करने वाला एक टेक्स्ट प्रॉम्प्ट (हमारे मामले में, हमारे प्रॉम्प्ट का शीर्षक)।
    • एक छवि संकेत जिसे हमें बेस64-एन्कोडेड डेटा यूआरएल के रूप में प्रदान करना है।
    • भविष्यवाणी पूरी होने पर पिंग करने के लिए एक वेबहुक (हम इसे प्रतिकृति-रेल द्वारा प्रदान किए गए वेबहुक मार्ग पर इंगित करते हैं)।
 <पी> यदि आप https://YOUR_NGROK_URL/prompts/new पर जाते हैं और शीर्षक के साथ एक छवि अपलोड करते हैं, तो अब आप एक भविष्यवाणी ट्रिगर करेंगे। पूरा होने पर, यह दिए गए वेबहुक के माध्यम से वापस कॉल करेगा। क्योंकि हमने binding.irb सेट किया है वहां ब्रेकप्वाइंट, नियंत्रक कार्रवाई एक आरईपीएल में रुक जाती है, और हम चारों ओर देख सकते हैं:

 <पी> जैसा कि हम देख सकते हैं, छवि-से-छवि पीढ़ी का हमारा पहला प्रयास सफल रहा। पूर्वानुमान मॉडल बनाई गई छवि पर एक यूआरएल लौटाता है, जिसे हम स्थानीय रूप से संग्रहीत करना चाहेंगे (वे समय-समय पर रिप्लिकेट पर हटा दिए जाते हैं)। हम अगली बार इस पर करीब से नज़र डालेंगे।

अगला:LiteDB डीप डाइव

<पी> इस शुरुआती पोस्ट में, हमने आपके रेल्स ऐप के सभी घटकों को एक ही मशीन पर होस्ट करने के लिए एक दिलचस्प विकल्प के रूप में लाइटस्टैक वातावरण पेश किया है। इसके अलावा हमने एक उदाहरण ऐप भी स्थापित किया है जो एआई छवि निर्माण के लिए Replication.com से बात करता है।

<पी> इस श्रृंखला के अगले भाग में, हम लाइटस्टैक के पहले और केंद्रीय तत्व - LiteDB का पता लगाएंगे - अधिक गहराई में. हम कुछ ऐसे लक्षणों पर गौर करेंगे जो इसे विशिष्ट रूप से शक्तिशाली बनाते हैं, सामान्य नुकसान, सीमाएं और समझौता।

<पी> तब तक, कोडिंग का आनंद लें!

<पी> पी.एस. यदि आप प्रेस से हटते ही रूबी मैजिक पोस्ट पढ़ना चाहते हैं, तो हमारे रूबी मैजिक न्यूज़लेटर की सदस्यता लें और एक भी पोस्ट न चूकें!
  1. जावास्क्रिप्ट में दो सरणियों में कैसे शामिल हों? जावास्क्रिप्ट में दो सरणियों में कैसे शामिल हों?

    जावास्क्रिप्ट में दो सरणियों को एक साथ जोड़ने के लिए कोड निम्नलिखित है - उदाहरण <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>

  1. एंड्रॉइड में स्ट्रिंग बिल्डर क्लास का उपयोग कैसे करें? एंड्रॉइड में स्ट्रिंग बिल्डर क्लास का उपयोग कैसे करें?

    एक उदाहरण में जाने से पहले, हमें पता होना चाहिए कि स्ट्रिंग बिल्डर क्या है। स्ट्रिंगबिल्डर वर्ग का उपयोग एक परिवर्तनीय स्ट्रिंग बनाने के लिए किया जाता है और यह थ्रेड सुरक्षित नहीं है इसलिए एकाधिक थ्रेड एक समय में स्ट्रिंग बिल्डर क्लास तक पहुंच सकते हैं। यह उदाहरण एंड्रॉइड में स्ट्रिंग बिल्डर क्लास क

  1. HTML में मल्टी-लाइन टेक्स्ट इनपुट (टेक्स्ट एरिया) कैसे बनाएं? HTML में मल्टी-लाइन टेक्स्ट इनपुट (टेक्स्ट एरिया) कैसे बनाएं?

    मल्टी-लाइन टेक्स्ट इनपुट बनाने के लिए, HTML टैग का उपयोग करें। आप कॉलम और पंक्तियों की विशेषताओं का उपयोग करके टेक्स्ट क्षेत्र का आकार निर्धारित कर सकते हैं। इसका उपयोग एक फॉर्म के भीतर किया जाता है, ताकि उपयोगकर्ता कई पंक्तियों में टेक्स्ट इनपुट कर सकें। यहां टैग की विशेषताएं दी गई हैं - विशेषता