रेल्स 7 आने ही वाला है। हमारे पास एक पुष्टि की गई रिलीज़ डेट नहीं है, लेकिन क्रिसमस से पहले उपलब्ध होने की उम्मीद है, इसलिए बहुत लंबा इंतजार नहीं करना पड़ेगा। इस पोस्ट के प्रकाशन के अनुसार नवीनतम वर्जन 7.0.0.rc1 है, पहला रिलीज़ कैंडिडेट। Basecamp, HEY, Github, और Shopify सभी रेल्स 7 अल्फा को प्रोडक्शन में चला रहे हैं, इसलिए हम रिलीज़ कैंडिडेट के भी काफी स्थिर होने की उम्मीद कर सकते हैं।
इस पोस्ट में, हम उन कुछ नई सुविधाओं और परिवर्तनों को देखेंगे जो रेल्स 7 लाएगा।
Node और Webpack आवश्यक नहीं
हां, आपने सही पढ़ा! रेल्स 7 में JavaScript को अब NodeJS या Webpack की आवश्यकता नहीं होगी। और आप अभी भी npm पैकेज का उपयोग कर सकते हैं।
Babel के साथ ES6 ट्रांसपाइलिंग और Webpack के साथ बंडलिंग के लिए बहुत सारे सेटअप की आवश्यकता होती है। जबकि रेल्स ने Webpacker जेम के साथ इसका काफी अच्छा समर्थन किया, इसने बहुत सारा बोझ लाया, समझना और इसमें बदलाव करना मुश्किल था, खासकर अपग्रेडेबिलिटी बनाए रखते हुए।
अब, rails new के साथ बनाए गए नए ऐप्स के लिए डिफ़ॉल्ट importmaps-rails जेम के माध्यम से इम्पोर्ट मैप्स का उपयोग करना है। package.json लिखने और npm या yarn के साथ निर्भरताएं इंस्टॉल करने के बजाय, आप निर्भरताओं को पिन (या अनपिन या अपडेट) करने के लिए ./bin/importmap CLI का उपयोग करते हैं।
उदाहरण के लिए, date-fns इंस्टॉल करने के लिए:
यह config/importmap.rb में एक लाइन जोड़ देगा जैसे:
आपके JavaScript कोड में, आप सब कुछ वैसे ही उपयोग करना जारी रख सकते हैं जैसे आप करते थे:
इस सेटअप के साथ ध्यान रखने वाली एक बात यह है कि आपके द्वारा लिखे गए और ब्राउज़र को मिलने वाले बीच कोई ट्रांसपाइलिंग नहीं है। अधिकांश भाग के लिए, यह ठीक है क्योंकि अब जो ब्राउज़र मायने रखते हैं वे ES6 को बॉक्स से बाहर सपोर्ट करते हैं।
लेकिन इसका यह भी अर्थ है कि आप TypeScript या JSX का उपयोग नहीं कर पाएंगे क्योंकि उन्हें उपयोग से पहले JS में ट्रांसपाइलेशन की आवश्यकता होती है।
तो, यदि आप JSX के साथ React का उपयोग करना चाहते हैं, तो आपको अभी भी एक अलग सेटअप (webpack/rollup/esbuild का उपयोग करके) पर वापस जाना होगा।
रेल्स 7 यह आपके लिए कर सकता है। आपको बस अपनी चुनी हुई रणनीति के साथ एक कमांड की आवश्यकता है:
टर्बोलिंक्स और UJS को टर्बो और स्टिमुलस द्वारा प्रतिस्थापित किया गया
रेल्स 7 के साथ जनरेटेड एप्लिकेशन को डिफ़ॉल्ट रूप से टर्बोलिंक्स और UJS के बजाय हॉटवायर से टर्बो और स्टिमुलस मिलेगा। हॉटवायर एक नया दृष्टिकोण है जो HTML को वायर पर भेजकर DOM में तेज़ अपडेट डिलीवर करता है।
डेटाबेस लेयर पर एन्क्रिप्शन
रेल्स 7 ActiveRecord::Base पर encrypts मेथड का उपयोग करके कुछ डेटाबेस फील्ड्स को एन्क्रिप्टेड के रूप में मार्क करने की अनुमति देता है। इसका मतलब है कि एक प्रारंभिक सेटअप के बाद, आप इस तरह कोड लिख सकते हैं:
आप एन्क्रिप्टेड एट्रिब्यूट्स का उपयोग किसी अन्य एट्रिब्यूट की तरह ही कर सकते हैं। रेल्स 7 आपके एप्लिकेशन और डेटाबेस के बीच इसे ऑटोमैटिकली एन्क्रिप्ट और डिक्रिप्ट करेगा।
लेकिन यह एक मामूली विचित्रता के साथ आता है: आप उस फील्ड द्वारा डेटाबेस को क्वेरी नहीं कर सकते जब तक कि आप encrypts मेथड में deterministic: true विकल्प पास न करें। डिटरमिनिस्टिक मोड डिफ़ॉल्ट नॉन-डिटरमिनिस्टिक मोड की तुलना में कम सुरक्षित है, इसलिए इसका उपयोग केवल उन एट्रिब्यूट्स के लिए करें जिन्हें आप बिल्कुल क्वेरी करना चाहते हैं।
एसिंक्रोनस क्वेरीइंग
अब एक load_async मेथड है जिसका उपयोग आप डेटा क्वेरी करते समय बैकग्राउंड में परिणाम प्राप्त करने के लिए कर सकते हैं। यह विशेष रूप से महत्वपूर्ण है जब आपको कंट्रोलर एक्शन से कई असंबंधित क्वेरी लोड करने की आवश्यकता होती है। आप चला सकते हैं:
यह दोनों क्वेरीज़ को एक ही समय में बैकग्राउंड में फायर करेगा। इसलिए, यदि प्रत्येक क्वेरी में 200ms लगते हैं, तो डेटा प्राप्त करने में कुल समय ~200ms होगा बजाय 400ms के, यदि उन्हें सीरियली प्राप्त किया जाता है।
रेल्स 7 के लिए Zeitwerk मोड
यह उन पुराने एप्लिकेशन के लिए एक ब्रेकिंग चेंज है जो अभी भी क्लासिक लोडर चलाते हैं। सभी रेल्स 7 एप्लिकेशन को Zeitwerk मोड का उपयोग करना होगा, लेकिन स्विच काफी आसान है। पूर्ण Zeitwerk अपग्रेड गाइड देखें।
अन्य रेल्स 7 अपडेट्स
अनलिमिटेड बार जॉब्स रीट्राई करें
ActiveJob अब retry_on पर attempts पैरामीटर के रूप में :unlimited पास करने की अनुमति देता है। रेल्स बिना किसी अधिकतम प्रयास की संख्या के जॉब को प्रयास करना जारी रखेगा।
नामित वेरिएंट्स
अब आप हर एक्सेस पर आकार निर्दिष्ट करने के बजाय ActiveStorage पर वेरिएंट्स को नाम दे सकते हैं।
हैश को HTML एट्रिब्यूट्स में
व्यूज़ में उपयोग के लिए एक नया tag.attributes मेथड है जो हैश को HTML एट्रिब्यूट्स में अनुवाद करता है:
उत्पन्न करेगा
रूबी debug
डीबगिंग के लिए नया डिफ़ॉल्ट byebug से debug जेम में बदल गया है।
byebug कॉल करने के बजाय, अब आपको डीबगिंग सत्र में प्रवेश करने के लिए कोड में debugger कॉल करने की आवश्यकता है।
sole के साथ सिंगल रिकॉर्ड दावा करें
रिकॉर्ड क्वेरी करते समय, अब आप sole या find_sole_by कॉल कर सकते हैं ( first या find_by के बजाय) जब आप दावा करना चाहते हैं कि क्वेरी को केवल एक रिकॉर्ड से मेल खाना चाहिए।
एसोसिएशन की उपस्थिति/अनुपस्थिति की जांच करें
अब हम जॉइन करके और आईडी के अस्तित्व की जांच करने के बजाय यह जांचने के लिए where.associated(:association) का उपयोग कर सकते हैं कि एक एसोसिएशन एक रिकॉर्ड पर मौजूद है या नहीं।
कंट्रोलर एक्शन से जनरेटेड फाइल्स स्ट्रीम करें
अब आप एक कंट्रोलर एक्शन के अंदर send_stream का उपयोग करके ऑन-द-फ्लाई जनरेट की जा रही फाइल को स्ट्रीम करना शुरू कर सकते हैं।
यह यूजर को तत्काल (आंशिक) प्रतिक्रिया प्रदान करता है ताकि उन्हें पता चले कि कुछ हो रहा है और यदि आप Heroku पर तैनात हैं तो एक अतिरिक्त लाभ है।
चूंकि फाइल तुरंत स्ट्रीम होना शुरू हो जाएगी, Heroku कनेक्शन को समाप्त नहीं करेगा। इसका मतलब है कि आपको 30 सेकंड से अधिक समय लेने वाली वन-ऑफ फाइल्स जनरेट करने के लिए बैकग्राउंड जॉब्स का सहारा लेने की आवश्यकता नहीं है।
रेल्स 7 में अपग्रेड करना
रेल्स के पिछले वर्जन की तरह, अपग्रेड करना सरल है। जबकि हमारे पास अभी तक एक आधिकारिक अपग्रेड गाइड नहीं है, चरण वही रहेंगे:
- Gemfile में रेल्स वर्जन नंबर बदलें (
7.0.0.rc1प्रकाशन तिथि के अनुसार) औरbundle updateचलाएं। bundle exec rails app:updateचलाएं। इंटरएक्टिव CLI का पालन करें और आवश्यकतानुसार फाइल्स जोड़ें/बदलें/संशोधित करें।- अपने टेस्ट चलाएं और सत्यापित करें कि सब कुछ अपेक्षित रूप से काम करता है।
समापन
आप रेल्स 7 रिलीज़ नोट्स में बग फिक्स, सुविधाओं, और परिवर्तनों की पूरी सूची देख सकते हैं। ये वर्तमान में व्यापक नहीं हैं, लेकिन हम जल्द ही उनके अपडेट होने की उम्मीद कर सकते हैं।
यदि आप अभी भी रेल्स 6 या उससे कम चला रहे हैं, तो कृपया ध्यान दें कि रेल्स 7 के अंतिम रिलीज़ के साथ, रेल्स 6.1 "सुरक्षा मुद्दे केवल" मोड में प्रवेश करेगा और अब बग फिक्स प्राप्त नहीं करेगा। यह रेल्स 5.2 के लिए EOL को भी चिह्नित करेगा, क्योंकि इसे अब कोई फिक्स प्राप्त नहीं होगा।
हैप्पी कोडिंग!
P.S. यदि आप रूबी मैजिक पोस्ट्स को प्रेस से निकलते ही पढ़ना चाहते हैं, तो हमारे रूबी मैजिक न्यूजलेटर को सब्सक्राइब करें और कभी भी एक भी पोस्ट मिस न करें!
पुलकित गोयल
हमारे गेस्ट ऑथर पुलकित एक सीनियर फुल-स्टैक इंजीनियर और कंसल्टेंट हैं। अपने खाली समय में, वह अपने ब्लॉग पर अपने अनुभवों के बारे में लिखते हैं।
पुलकित गोयल के सभी लेख