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

Rack को समझना: Ruby वेब फ्रेमवर्क्स की रीढ़

हर Rails, Sinatra, और अन्य Ruby वेब फ्रेमवर्क्स के पीछे क्या हो रहा है?

उत्तर है Rack, वह प्रमुख घटक जो इसे संभव बनाता है।

लेकिन Rack वास्तव में क्या है?

Rack फ्रेमवर्क (Rails) और एप्लिकेशन सर्वर (Puma) के बीच एक परत है।

Rack को समझना: Ruby वेब फ्रेमवर्क्स की रीढ़

यह वह गोंद है जो उन्हें संवाद करने की अनुमति देता है।

हम Rack का उपयोग क्यों करते हैं?

हम Rack का उपयोग इसलिए करते हैं क्योंकि यह विभिन्न फ्रेमवर्क्स और सर्वर्स को विनिमेय (interchangeable) बनाता है।

वे घटक बन जाते हैं जिन्हें आप प्लग-इन कर सकते हैं।

इसका मतलब है कि आप Puma का उपयोग Rails, Sinatra और किसी अन्य Rack-संगत फ्रेमवर्क के साथ कर सकते हैं। इससे कोई फर्क नहीं पड़ता कि आप किस फ्रेमवर्क या सर्वर का उपयोग कर रहे हैं यदि वे Rack इंटरफेस को लागू करते हैं।

Rack के साथ, हर घटक अपना काम करता है और हर कोई खुश होता है!

Rack मिडलवेयर क्या है?

Rack हर वेब रिक्वेस्ट और रिस्पांस के बीच में बैठता है।

परिणामस्वरूप, यह एक अभिभावक के रूप में कार्य कर सकता है, अवांछित रिक्वेस्ट्स को अस्वीकार करके, या यह एक इतिहासकार के रूप में कार्य कर सकता है, धीमी प्रतिक्रियाओं का ट्रैक रखकर।

यही Rack मिडलवेयर है!

छोटे Ruby प्रोग्राम्स जो रिक्वेस्ट-रिस्पांस साइकिल के हिस्से के रूप में कॉल किए जाते हैं और इसके साथ कुछ करने का मौका पाते हैं।

इसका उपयोग किस तरह की चीजों के लिए किया जाता है?

  • लॉगिंग
  • सेशन्स
  • प्रोफाइलिंग (पता करें कि रिक्वेस्ट को पूरा होने में कितना समय लगता है)
  • कैशिंग
  • सुरक्षा (IP पते के आधार पर रिक्वेस्ट्स को अस्वीकार करें, या रिक्वेस्ट्स की संख्या सीमित करें)
  • स्टेटिक फाइल्स सर्व करना (css, js, png...)

ये काफी उपयोगी हैं और Rails अपनी कुछ कार्यक्षमता को लागू करने के लिए मिडलवेयर का अच्छा उपयोग करता है।

आप rake middleware के साथ Rails प्रोजेक्ट के अंदर मिडलवेयर की सूची देख सकते हैं।

अब, मैंने पहले जिस Rack इंटरफेस का उल्लेख किया था।

यह कैसा दिखता है?

आइए एक उदाहरण के साथ आपको दिखाते हैं...

अपना खुद का Rack एप्लिकेशन कैसे लिखें

आप अपना खुद का एप्लिकेशन लिखकर सीख सकते हैं कि Rack कैसे काम करता है।

चलिए करते हैं!

एक Rack एप्लिकेशन एक क्लास है जिसमें एक मेथड है: call।

यह ऐसा दिखता है:

 require 'rack' handler = Rack::Handler::Thin class RackApp def call(env) [200, {"Content-Type" => "text/plain"}, "Hello from Rack"] end end handler.run RackApp.new 

यह कोड पोर्ट 8080 पर एक सर्वर शुरू करेगा (इसे आज़माएं!)।

वापस की जा रही इस सरणी का क्या मतलब है?

  • HTTP स्टेटस कोड (200)
  • HTTP हेडर्स ("Content-Type")
  • कंटेंट ("Hello from Rack")

यदि आप रिक्वेस्ट विवरण तक पहुंचना चाहते हैं तो आप env आर्गुमेंट का उपयोग कर सकते हैं।

इस तरह:

 req = Rack::Request.new(env) 

ये मेथड्स उपलब्ध हैं:

  • path_info (/articles/1)
  • ip (उपयोगकर्ता का)
  • user_agent (Chrome, Firefox, Safari...)
  • request_method (get / post)
  • body (कंटेंट)
  • media_type (plain, json, html)

आप इस जानकारी का उपयोग अपना Rack एप्लिकेशन बनाने के लिए कर सकते हैं।

उदाहरण के लिए, हम अपनी सामग्री तक पहुंच से इनकार कर सकते हैं यदि IP पता 5.5.5.5 है।

यहां कोड है:

 require 'rack' handler = Rack::Handler::Thin class RackApp def call(env) req = Rack::Request.new(env) if req.ip == "5.5.5.5" [403, {}, ""] else [200, {"Content-Type" => "text/plain"}, "Hello from Rack"] end end end handler.run RackApp.new 

यदि आप प्रभाव देखना चाहते हैं तो पते को 127.0.0.1 में बदल सकते हैं।

यदि वह काम नहीं करता तो ::1 आज़माएं, localhost का IPv6 संस्करण।

Rack मिडलवेयर कैसे लिखें और उपयोग करें

अब:

आप एप्लिकेशन और मिडलवेयर को कैसे चेन करते हैं ताकि वे एक साथ काम करें?

Rack::Builder का उपयोग करके।

समझने का सबसे अच्छा तरीका एक उदाहरण के साथ है।

यहां हमारा Rack ऐप है:

 require 'rack' handler = Rack::Handler::Thin class RackApp def call(env) req = Rack::Request.new(env) [200, {"Content-Type" => "text/plain"}, "Hello from Rack - #{req.ip}"] end end 

यह मिडलवेयर है:

 class FilterLocalHost def initialize(app) @app = app end def call(env) req = Rack::Request.new(env) if req.ip == "127.0.0.1" || req.ip == "::1" [403, {}, ""] else @app.call(env) end end end 

यह है कि हम उन्हें कैसे जोड़ते हैं:

 app = Rack::Builder.new do |builder| builder.use FilterLocalHost builder.run RackApp.new end handler.run app 

इस उदाहरण में हमारे पास दो Rack एप्लिकेशन्स हैं:

  • IP जांच के लिए एक (FilterLocalHost)
  • कंटेंट डिलीवर करने के लिए एप्लिकेशन खुद (HTML, JSON, आदि)

ध्यान दें कि @app.call(env), यही FilterLocalHost को मिडलवेयर बनाता है।

दो चीजों में से एक हो सकती है:

  • हम एक प्रतिक्रिया लौटाते हैं, जो मिडलवेयर चेन को रोक देता है
  • हम @app.call(env) के साथ अगले मिडलवेयर, या ऐप को रिक्वेस्ट पास करते हैं

आपके Rack ऐप के किसी भी हिस्से में, मिडलवेयर सहित, आप प्रतिक्रिया को बदल सकते हैं।

उदाहरण:

 class UpcaseAll def initialize(app) @app = app end def call(env) status, headers, response = @app.call(env) response.upcase! [status, headers, response] end end 

यही ठीक से Rack काम करता है 🙂

सारांश

आपने Rack के बारे में सीखा, वह इंटरफेस जो Ruby वेब फ्रेमवर्क्स और सर्वर्स के बीच इंटरैक्शन को चला रहा है। आपने यह भी सीखा कि यह कैसे काम करता है यह समझने के लिए अपना खुद का Rack एप्लिकेशन कैसे लिखें।

यदि आपके कोई प्रश्न या प्रतिक्रिया है तो बेझिझक नीचे कमेंट छोड़ें।

पढ़ने के लिए धन्यवाद!


  1. रूबी NLP: अंतर्दृष्टिपूर्ण टेक्स्ट माइनिंग के लिए N-gram विश्लेषण में महारत रूबी NLP: अंतर्दृष्टिपूर्ण टेक्स्ट माइनिंग के लिए N-gram विश्लेषण में महारत

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

  1. डेवलपर्स के लिए iOS 12 बीटा कैसे इंस्टॉल करें - चरण-दर-चरण गाइड डेवलपर्स के लिए iOS 12 बीटा कैसे इंस्टॉल करें - चरण-दर-चरण गाइड

    WWDC 2018 आश्चर्य और नई प्रविष्टियों से भरा था। उनमें से एक, जिसे सभी में सबसे आकर्षक कहा जाता है, iOS 12 का नया अपग्रेड है। iOS 12 के साथ, नए बदलाव आएंगे, जिसमें मेमोजी, ARKit 2, एनिमोजी, Siri शॉर्टकट, ग्रुप फेसटाइम और बहुत कुछ शामिल हैं। फिलहाल, iOS 12 डेवलपर्स के लिए उपलब्ध है। यदि आप iOS 12 के न

  1. विंडोज 10 को मुफ्त में सुरक्षित रूप से डाउनलोड करें: चरण-दर-चरण गाइड विंडोज 10 को मुफ्त में सुरक्षित रूप से डाउनलोड करें: चरण-दर-चरण गाइड

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