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

जनरेटर्स और टेम्प्लेट्स के साथ रेल्स ऐप्स को बूटस्ट्रैप करना

रेल्स का बैटरीज-इनक्लूडेड दृष्टिकोण इसकी सबसे बड़ी संपत्तियों में से एक है। कोई अन्य फ्रेमवर्क आपके एप्लिकेशन को तेजी से जमीन से उतारना इतना सहज नहीं बनाता, कम से कम आंशिक रूप से रेल्स के जनरेटर्स के कारण।

यदि आपने किसी भी समय के लिए रेल्स का उपयोग किया है, तो आप जनरेटर्स के संपर्क में आए होंगे। नया एप्लिकेशन बनाने की आवश्यकता है? rails new चलाएं। मॉडल्स और व्यूज का एक गुच्छा स्कैफोल्ड करने की आवश्यकता है? rails generate scaffold चलाएं। दर्जनों और उपलब्ध हैं जो आपको तेजी से शुरू करने या आपके वर्कफ़्लो को सुव्यवस्थित करने में मदद करते हैं।

लेकिन कभी-कभी, जनरेटर्स का उपयोग करना पर्याप्त नहीं होता। आप इन कमांड्स के व्यवहार को कस्टमाइज़ करना चाह सकते हैं या यहां तक कि अपने खुद के बना सकते हैं। इस लेख में, हम जनरेटर्स पर करीब से नज़र डालेंगे - विशेष रूप से, टेम्प्लेट्स का उपयोग करके अपना खुद का कस्टम रेल्स एप्लिकेशन कैसे बनाएं।

शुरू करते हैं!

रेल्स जनरेटर्स क्या हैं?

जनरेटर फंक्शन्स (जिनसे आप पायथन या जावास्क्रिप्ट से परिचित हो सकते हैं) के साथ भ्रमित न हों, रेल्स जनरेटर्स कस्टम थोर कमांड्स हैं जो, ठीक है, चीजें जनरेट करने पर केंद्रित हैं।

बहुत सारे उदाहरण हैं। आप संभवतः मॉडल जनरेटर (rails generate model) से नए ActiveRecord मॉडल बनाने के लिए या माइग्रेशन जनरेटर (rails generate migration) से नई माइग्रेशन जनरेट करने के लिए परिचित होंगे। rails generate generator भी है जो - आपने अनुमान लगाया - एक नया जनरेटर बनाता है!

जनरेटर्स एक दूसरे को कॉल कर सकते हैं - उदाहरण के लिए, rails scaffold कई अन्य जनरेटर्स को कॉल करेगा - और फाइल्स बनाने या संशोधित करने, जेम्स इंस्टॉल करने, विशिष्ट रेक टास्क चलाने, और बहुत कुछ के लिए मेथड्स प्रदान करते हैं। आइए एक साधारण मॉडल स्पेक जनरेटर बनाकर समझें कि यह कैसे काम करता है।

रूबी ऑन रेल्स में अपना खुद का जनरेटर बनाना

निम्नलिखित चलाएं:



यह /lib/generators/model_spec में कई नई फाइल्स बनाएगा। हम lib/generators/model_spec/ फोल्डर में model_spec_generator.rb को संशोधित कर सकते हैं ताकि सही डायरेक्टरी में एक मॉडल स्पेक फाइल बनाई जा सके:



template कमांड lib/generators/model_spec/templates डायरेक्टरी में एक टेम्प्लेट फाइल की तलाश करेगा और इसे निर्दिष्ट स्थान पर रेंडर करेगा - spec/models डायरेक्टरी। कमांड टेम्प्लेट फाइल में पाए गए ERB-स्टाइल वेरिएबल्स को बदल देगा।

source_root सेट करके, हम अपने जनरेटर को बताते हैं कि यह कहां रेफरेंस टेम्प्लेट फाइल्स ढूंढ सकता है। lib/generators/model_spec/templates/ फोल्डर में टेम्प्लेट model_spec.rb इस तरह दिख सकता है:



एक बार जब आप वह फाइल बना लेते हैं, तो आप एक नई स्पेक फाइल बनाने के लिए जनरेटर चला सकते हैं।



कई जेम्स इस तरह के जनरेटर्स के साथ आते हैं। वास्तव में, हमने Rspec के साथ आने वाले जनरेटर का एक सरल संस्करण बनाया। FactoryBot में फैक्ट्रीज के लिए एक जनरेटर है। कई और उदाहरण हैं।

विभिन्न जेम्स में जनरेटर्स हमारे द्वारा बनाए गए की तुलना में अधिक परिष्कृत हैं। हम अपने जनरेटर को आर्गुमेंट्स ले सकते हैं या यहां तक कि इसे मौजूदा जनरेटर्स जैसे rails scaffold में हुक कर सकते हैं। यदि आप अधिक सीखना चाहते हैं तो रेल्स जनरेटर्स डॉक्यूमेंटेशन देखें।

तो जनरेटर्स में मौजूदा एप्लिकेशन में आपके वर्कफ़्लो को सरल बनाने की क्षमता है। लेकिन क्या हम एक नए एप्लिकेशन को सेट अप करने के लिए जनरेटर्स का उपयोग भी कर सकते हैं?

टेम्प्लेट्स में प्रवेश करें!

रूबी ऑन रेल्स में टेम्प्लेट्स

जैसा कि नाम से पता चलता है, टेम्प्लेट्स आपके एप्लिकेशन सेटअप को कस्टमाइज़ करने के लिए फाइल्स हैं। इन्हें उन टेम्प्लेट फाइल्स के साथ भ्रमित न करें जिन पर हमने पहले चर्चा की थी! हुड के तहत, वे एक विशिष्ट उद्देश्य के साथ सिर्फ जनरेटर्स हैं, जैसा कि टेम्प्लेट API द्वारा प्रमाणित है। जबकि जनरेटर्स के समान नहीं, वे बहुत समान हैं।

यदि आपके पास एक मौजूदा टेम्प्लेट फाइल है, तो आप इसे इस तरह उपयोग कर सकते हैं:



स्थानीय फाइल निर्दिष्ट करने के बजाय, आप एक URL भी निर्दिष्ट कर सकते हैं। यह विशेष रूप से उपयोगी है क्योंकि यह आपको एप्लिकेशन टेम्प्लेट्स साझा करने की अनुमति देता है।



आप rails new चलाते समय केवल टेम्प्लेट्स का उपयोग करने तक सीमित नहीं हैं। यदि आपने पहले ही एक ऐप सेट अप कर लिया है, तो आप इसे बाद में निष्पादित करके टेम्प्लेट्स लागू कर सकते हैं:



टेम्प्लेट्स अत्यधिक उपयोगी हो सकते हैं। कौन हर बार जब वे एक नया ऐप बनाते हैं तो उन्हीं कुछ जेम्स को जोड़ने और उन्हीं कॉन्फ़िगरेशन परिवर्तनों को करने को स्वचालित नहीं करना चाहेगा? अपना खुद का एप्लिकेशन टेम्प्लेट बनाना बहुत मजेदार है - भले ही यह लंबे समय में बहुत समय न बचाए।

रेल्स में अपना खुद का टेम्प्लेट बनाना

अब हम जनरेटर्स के बारे में जानते हैं और टेम्प्लेट्स का उपयोग कैसे करें। आइए कुछ सेटअप चरणों को स्वचालित करने के लिए एक साधारण एप्लिकेशन टेम्प्लेट बनाएं।

आप अपने रेल्स ऐप को कैसे सेट अप करते हैं यह व्यक्तिगत पसंद पर बहुत निर्भर करता है, लेकिन यहां एक उदाहरण है:

  1. dotenv जेम इंस्टॉल करें।
  2. डेवलपमेंट वातावरण के लिए .env.development फाइल बनाएं।
  3. डेटाबेस कॉन्फ़िगरेशन फाइल को पर्यावरण चर का उपयोग करने के लिए अनुकूलित करें।
  4. वैकल्पिक रूप से Rspec इंस्टॉल और सेट अप करें।

आइए एक स्थानीय फाइल - mytemplate.rb - बनाएं और gem कमांड का उपयोग करके dotenv जोड़ें।



चूंकि हमने अभी dotenv जेम जोड़ा है, आइए अपने डेटाबेस कॉन्फ़िगरेशन को रखने के लिए एक .env.development फाइल भी बनाएं।

आप create_file का उपयोग करके विशिष्ट सामग्री के साथ एक नई फाइल बना सकते हैं। आप इसे टेम्प्लेट या जनरेटर डॉक्यूमेंटेशन में नहीं पाएंगे, क्योंकि मेथड थोर द्वारा प्रदान किया जाता है। आप एलियास file भी देख सकते हैं। एप्लिकेशन टेम्प्लेट्स Rails::Generators::AppGenerator के संदर्भ में मूल्यांकन किए जाते हैं, और ठीक वहीं file एलियास परिभाषित है।



app_name वेरिएबल rails new के पहले आर्गुमेंट को रखता है। इस वेरिएबल का उपयोग करके, हम यह सुनिश्चित कर सकते हैं कि हमारी कॉन्फिग फाइल जनरेटेड एप्लिकेशन से मेल खाती है।

अगला, आइए अपने पर्यावरण चर का उपयोग करके डेटाबेस से कनेक्ट करें। हम create_file कमांड का उपयोग करके पूरे config/database.yml को ओवरराइट कर सकते हैं, लेकिन आइए इसे inject_into_file का उपयोग करके संशोधित करें।



हम after आर्गुमेंट के साथ स्ट्रिंग्स या रेगेक्स दोनों का उपयोग करके यह निर्दिष्ट कर सकते हैं कि कंटेंट कहां इंजेक्ट करना है।

बेशक, इस तरह की कॉन्फिगरेशन केवल तभी समझ में आती है जब यूजर SQLite के साथ एप्लिकेशन नहीं बना रहा हो। आप options वेरिएबल का उपयोग करके कुछ आर्गुमेंट्स की उपस्थिति की जांच कर सकते हैं। यह सबसे अच्छा है कि आप रेल्स के ऐप जनरेटर के स्रोत कोड को पढ़ें ताकि आप देख सकें कि कौन से विकल्प उपलब्ध हैं।



अंतिम लेकिन कम नहीं, आइए यूजर्स को Rspec इंस्टॉल करने की अनुमति दें यदि वे चाहते हैं। यूजर इनपुट लेने और इंटरैक्टिव टेम्प्लेट बनाने के लिए विभिन्न मेथड्स हैं। yes? मेथड यूजर से पुष्टि मांगता है:



हम पहले से ही gem मेथड जानते हैं, लेकिन generate और after_bundle नए हैं।

जैसा कि पहले उल्लेख किया गया है, Rspec अपने स्वयं के जनरेटर्स जोड़ता है, और आप इन जनरेटर्स (या किसी अन्य को, उस मामले के लिए) को सीधे अपने टेम्प्लेट से कॉल कर सकते हैं। लेकिन एक पकड़ है - gem मेथड के साथ निर्दिष्ट जेम्स टेम्प्लेट के अंत में ही इंस्टॉल होते हैं। generate को ऐसे जेम द्वारा आपूर्ति किए गए जनरेटर के साथ कॉल करना विफल होगा - यही कारण है कि आपको after_bundle के साथ कमांड को कॉलबैक के रूप में रजिस्टर करना चाहिए।

नोट: समाप्त करने से पहले, फाइल्स बनाने या संशोधित करने के बारे में एक त्वरित शब्द। हमने create_file और inject_into_file का उपयोग किया, लेकिन कई अन्य विकल्प हैं। आप अलग-अलग टेम्प्लेट पढ़ते समय copy_file या template देख सकते हैं। मैंने उन्हें यहां सरल रखने के लिए उल्लेख नहीं किया। यदि आप अधिक एडवांस्ड टेम्प्लेट बनाना चाहते हैं, तो आपको पता होना चाहिए कि फाइलों से निपटने के लिए ये अन्य मेथड्स मौजूद हैं।

परिणाम: रेल्स में अंतिम टेम्प्लेट

अंतिम टेम्प्लेट इस तरह दिखना चाहिए:



आप इस विशेष टेम्प्लेट को चलाकर टेस्ट कर सकते हैं:



या:



कस्टम डेटाबेस कॉन्फ़िगरेशन का लाभ उठाने के लिए।

जैसा कि उल्लेख किया गया है, यह फाइल GitHub gist के रूप में साझा करने के लिए पूरी तरह से उपयुक्त है। इसे अपनी आवश्यकताओं के अनुरूप अनुकूलित करें, इसे अपलोड करें, और फिर इसे अपने सहयोगियों, दोस्तों, और किसी और के साथ साझा करें जो आपके कस्टम ऐप टेम्प्लेट में रुचि रखते हैं 😉।

रेल्स जनरेटर्स और टेम्प्लेट्स के बारे में अधिक जानें

कहने की जरूरत नहीं, हमने यहां केवल सतह को खरोंचा है।

हर किसी की रेल्स ऐप्स लिखने और विकसित करने के लिए अलग-अलग प्राथमिकताएं होती हैं, इसलिए वहां कई जनरेटर्स और एप्लिकेशन टेम्प्लेट्स हैं। आप उनके बारे में पढ़कर विशिष्ट कस्टमाइज़ेशन करने के बारे में बहुत कुछ सीख सकते हैं। मैं क्रिस ओलिवर के जंपस्टार्ट और रेल्सबाइट्स की सिफारिश करता हूं, जिनमें से बाद वाला टेम्प्लेट्स का एक कम्युनिटी-क्यूरेटेड संग्रह है।

थॉटबॉट के सस्पेंडर्स भी हैं, जिसने मुझे रेल्स जनरेटर्स और टेम्प्लेट्स में गहराई से जाने के लिए प्रेरित किया। मैंने अपना खुद का एप्लिकेशन टेम्प्लेट भी लिखा - शिनेंजेपेलिन - जो, जबकि अप-टू-डेट नहीं है, फिर भी कुछ प्रेरणा प्रदान कर सकता है।

समापन: रूबी ऑन रेल्स जनरेटर्स और टेम्प्लेट्स के साथ शुरुआत करें

इस पोस्ट में, हमने रेल्स जनरेटर्स की मूल बातें देखीं और उनका उपयोग कैसे किया जाता है। हमने नए मॉडल स्पेक्स लिखने को सरल बनाने के लिए अपने खुद के जनरेटर्स बनाए।

फिर हम टेम्प्लेट्स में तल्लीन हुए और सीखा कि आप अपने एप्लिकेशन सेटअप को कस्टमाइज़ करने के लिए एक साधारण टेम्प्लेट कैसे बना सकते हैं। यह थोड़ा काम हो सकता है, लेकिन काफी फायदेमंद भी। यदि अपना खुद का टेम्प्लेट लिखना आपके लिए नहीं है, तो चुनने के लिए ऑनलाइन कई मौजूदा हैं!

हैप्पी टेम्प्लेटिंग!

P.S. यदि आप रूबी मैजिक पोस्ट्स को प्रेस से निकलते ही पढ़ना चाहते हैं, तो हमारे रूबी मैजिक न्यूजलेटर को सब्सक्राइब करें और कभी भी एक भी पोस्ट मिस न करें!

जनरेटर्स और टेम्प्लेट्स के साथ रेल्स ऐप्स को बूटस्ट्रैप करना

हैंस-जॉर्ग श्नेडलिट्ज़

हमारे गेस्ट ऑथर हैंस वियना, ऑस्ट्रिया के एक रेल्स इंजीनियर हैं। वह अपना अधिकांश समय कोडिंग या कोडिंग के बारे में पढ़ने में बिताते हैं, और कभी-कभी अपने ब्लॉग पर इसके बारे में भी लिखते हैं! जब वह स्क्रीन के सामने नहीं बैठे होते, तो आप शायद उन्हें बाहर, किसी पहाड़ पर चढ़ते हुए पाएंगे।

हैंस-जॉर्ग श्नेडलिट्ज़ के सभी लेख


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

    एंड्रॉइड में ViewFlipper के साथ व्यू फ्लिपिंग एनिमेशन यह ट्यूटोरियल ViewFlipper का उपयोग करके व्यूज़ के बीच एनिमेटेड ट्रांजिशन बनाने का तरीका दिखाता है, जिसमें ऑटो-फ्लिपिंग और मैनुअल नेविगेशन शामिल है। लेआउट (activity_main.xml) <RelativeLayout xmlns:android=https://schemas.android.com/apk/res/an

  1. Java में JFrame और JDialog में क्या अंतर है? Java में JFrame और JDialog में क्या अंतर है?

    JFrame फ्रेम में जोड़े गए कंपोनेंट्स को इसकी सामग्री कहा जाता है, इन्हें contentPane द्वारा प्रबंधित किया जाता है। JFrame में कंपोनेंट जोड़ने के लिए, हमें इसके contentPane का उपयोग करना चाहिए। एक JFrame में टाइटल, बॉर्डर, (वैकल्पिक) मेनू बार और यूज़र-स्पेसिफाइड कंपोनेंट्स के साथ एक विंडो होती है। ए

  1. OpenCV में C++ का उपयोग करके सिंगल चैनल इमेज का पिक्सेल मान कैसे पढ़ें? OpenCV में C++ का उपयोग करके सिंगल चैनल इमेज का पिक्सेल मान कैसे पढ़ें?

    डिजिटल इमेज पिक्सेल से बनी होती हैं। OpenCV का उपयोग करके, पिक्सेल के मान को पढ़ना आसान है। हालांकि, यदि हम पिक्सेल मान प्राप्त करना चाहते हैं, तो हमें सिंगल चैनल को अलग से संभालना होगा। यहां हम cimage नामक मैट्रिक्स में एक इमेज लोड कर रहे हैं, और फिर cvtColor(cimage, img, COLOR_BGR2GRAY); का उपयोग