जब आप अपने रेल्स ऐप को डिप्लॉय करने का तरीका खोजते हैं, तो आपको बहुत सारे नाम दिखाई देंगे: Apache, Unicorn, Puma, Phusion Passenger, Nginx, Rainbows, और बहुत कुछ। वे सभी "रेल्स डिप्लॉय करने" सॉफ्टवेयर की श्रेणी में फिट होते प्रतीत होते हैं, लेकिन उनके बीच एक महत्वपूर्ण अंतर है। कुछ "वेब सर्वर" हैं, और अन्य "ऐप सर्वर" हैं।
एक बार जब आप समझ जाते हैं कि कौन सा कौन सा है, और प्रत्येक श्रेणी आपके सिस्टम में कहां फिट बैठती है, तो डिप्लॉयमेंट बहुत अधिक समझ में आने लगेगा। लेकिन श्रेणियां हमेशा स्पष्ट नहीं होतीं।
वेब सर्वर क्या है, और यह ऐप सर्वर से कैसे अलग है? क्या आप एक के बिना दूसरे का उपयोग कर सकते हैं? और Rack इसमें कहां फिट बैठता है?
वेब सर्वर क्या है?
एक वेब सर्वर एक प्रोग्राम है जो एक उपयोगकर्ता से आपकी वेबसाइट के लिए एक अनुरोध लेता है और उस पर कुछ प्रोसेसिंग करता है। फिर, यह अनुरोध को आपके रेल्स ऐप को दे सकता है। Nginx और Apache दो बड़े वेब सर्वर हैं जिनका आप सामना करेंगे।
यदि अनुरोध किसी ऐसी चीज के लिए है जो अक्सर नहीं बदलती, जैसे CSS, JavaScript, या इमेज, तो आपके रेल्स ऐप को शायद इसे देखने की आवश्यकता नहीं है। वेब सर्वर स्वयं अनुरोध को संभाल सकता है, बिना आपके ऐप से बात किए। यह आमतौर पर तेज़ होगा।
वेब सर्वर SSL अनुरोधों को संभाल सकते हैं, स्टैटिक फाइल्स और एसेट्स सर्व कर सकते हैं, अनुरोधों को कंप्रेस कर सकते हैं, और बहुत सी अन्य चीजें कर सकते हैं जिनकी लगभग हर वेबसाइट को आवश्यकता होती है। और यदि आपके रेल्स ऐप को वास्तव में एक अनुरोध को संभालने की आवश्यकता है, तो वेब सर्वर इसे आपके ऐप सर्वर को पास कर देगा।
ऐप सर्वर क्या है?
एक ऐप सर्वर वह चीज है जो वास्तव में आपके रेल्स ऐप को चलाता है। आपका ऐप सर्वर आपके कोड को लोड करता है और आपके ऐप को मेमोरी में रखता है। जब आपके ऐप सर्वर को आपके वेब सर्वर से एक अनुरोध मिलता है, तो यह आपके रेल्स ऐप को इसके बारे में बताता है। आपका ऐप अनुरोध को संभालने के बाद, ऐप सर्वर प्रतिक्रिया को वेब सर्वर को वापस भेजता है (और अंततः उपयोगकर्ता को)।
आप अधिकांश ऐप सर्वरों को बिना सामने वेब सर्वर के स्वयं चला सकते हैं। शायद आप डेवलपमेंट मोड में यही करते हैं! प्रोडक्शन में, हालांकि, आपके सामने आमतौर पर एक वेब सर्वर होगा। यह एक साथ कई ऐप्स को संभालेगा, आपके एसेट्स को तेजी से रेंडर करेगा, और हर अनुरोध पर आपके द्वारा किए जाने वाले बहुत सारे प्रोसेसिंग से निपटेगा।
रेल्स ऐप्स के लिए एक टन ऐप सर्वर हैं, जिनमें मोंगरेल (जिसका अब अधिक उपयोग नहीं होता), यूनिकॉर्न, थिन, रेनबोज़, और प्यूमा शामिल हैं। प्रत्येक के अलग-अलग फायदे और अलग-अलग दर्शन हैं। लेकिन अंत में, वे सभी एक ही चीज पूरी करते हैं—आपके रेल्स ऐप को चालू रखना और अनुरोधों को संभालना।
पैसेंजर के बारे में क्या?
Phusion Passenger थोड़ा अनोखा है। "स्टैंडअलोन मोड" में, यह बिल्कुल एक ऐप सर्वर की तरह काम कर सकता है। लेकिन इसे सीधे एक वेब सर्वर में भी बनाया जा सकता है, इसलिए आपको अपने रेल्स ऐप्स चलाने के लिए एक अलग ऐप सर्वर की आवश्यकता नहीं है।
यह वास्तव में सुविधाजनक हो सकता है। खासकर यदि आप कई ऐप्स चलाने की योजना बना रहे हैं और प्रत्येक के लिए ऐप सर्वर सेटअप करने में समय नहीं लगाना चाहते। पैसेंजर इंस्टॉल करने के बाद, आप बस वेब सर्वर को सीधे अपने रेल्स ऐप पर इंगित करें (एक ऐप सर्वर के बजाय), और आपका रेल्स ऐप अनुरोधों को संभालना शुरू कर देगा!
पैसेंजर एक अच्छा विकल्प है, लेकिन एक अलग ऐप सर्वर रखना अभी भी अच्छा हो सकता है। ऐप सर्वर को अलग रखने से आपको उस ऐप सर्वर को चुनने का लचीलापन मिलता है जो आपकी आवश्यकताओं के लिए सबसे उपयुक्त है, और आप इसे अपने दम पर चला और स्केल कर सकते हैं। फिर भी, मैं अगली बार एक नया छोटा ऐप डिप्लॉय करते समय इसे फिर से आजमाऊंगा। मुझे उम्मीद है कि यह भविष्य के ऐप्स को उसी सर्वर पर डिप्लॉय करना आसान बना देगा।
Rack के बारे में क्या?
Rack वह जादू है जो इनमें से किसी भी ऐप सर्वर को आपके रेल्स ऐप को चलाने देता है। (या सिनात्रा ऐप, या पैड्रिनो ऐप, या...)
आप Rack को एक सामान्य भाषा के रूप में सोच सकते हैं जो रूबी वेब फ्रेमवर्क (जैसे रेल्स) और ऐप सर्वर दोनों बोलते हैं। क्योंकि प्रत्येक पक्ष एक ही भाषा जानता है, इसका मतलब है कि रेल्स यूनिकॉर्न से बात कर सकता है और यूनिकॉर्न रेल्स से, बिना रेल्स या यूनिकॉर्न को एक-दूसरे के बारे में कुछ भी जाने।
वे कैसे संबंधित हैं?
तो, यह सब एक साथ कैसे फिट होता है?
इन टुकड़ों में से, एक वेब अनुरोध पहले आपके वेब सर्वर पर पहुंचेगा। यदि अनुरोध कुछ ऐसा है जिसे रेल्स संभाल सकता है, तो वेब सर्वर अनुरोध पर कुछ प्रोसेसिंग करेगा, और इसे ऐप सर्वर को सौंप देगा। ऐप सर्वर आपके रेल्स ऐप से बात करने के लिए Rack का उपयोग करता है। जब आपका ऐप अनुरोध के साथ हो जाता है, तो आपका रेल्स ऐप प्रतिक्रिया को ऐप सर्वर और वेब सर्वर के माध्यम से वापस आपके ऐप का उपयोग करने वाले व्यक्ति को भेजता है।
अधिक विशेष रूप से, Nginx एक अनुरोध को Unicorn को पास कर सकता है। Unicorn अनुरोध को Rack को देता है, जो इसे रेल्स राउटर को देता है, जो इसे सही कंट्रोलर को देता है। फिर, आपकी प्रतिक्रिया बस दूसरे रास्ते से वापस जाती है।
यह अवलोकन सरलीकृत हो सकता है। लेकिन सिर्फ इन श्रेणियों को जानने से आपको आपके सामने आने वाले सॉफ्टवेयर को सही मानसिक बाल्टी में रखने में मदद मिलेगी।
यह समझने के बाद कि ऐप सर्वर और वेब सर्वर एक साथ कैसे फिट होते हैं, जब आपके पास वे होंगे तो सर्वर समस्याओं को डीबग करना बहुत आसान होगा। आप उन सभी अलग-अलग जगहों को जानेंगे जहां आप देख सकते हैं, और वे कैसे इंटरैक्ट करते हैं। और जब अगला दिलचस्प ऐप सर्वर आएगा, तो आपके लिए इसे स्वैप करना और भी आसान होगा!
यदि आप इस बारे में अधिक जानना चाहते हैं कि रेल्स वेब के साथ कैसे इंटरैक्ट करता है, तो इस लेख को देखें: How Rails Sessions Work.