मैं इसका उत्तर एक स्क्रीनशॉट के साथ दूंगा:
{% img img-responsive /images/posts/ruby-2-1-improvement.png 645 259 मैं इसे एक बड़ा हां कहूंगा %}
हमने लगभग एक हफ्ते पहले प्रोडक्शन में रूबी 1.9 से 2.1 में अपग्रेड किया, और ये वही है जो हमने देखा। नीचे ग्रे सेक्शन हमारा गार्बेज कलेक्शन समय है जो लगभग शून्य हो गया। कुल मिलाकर, अपग्रेड ने हमें बिना किसी अतिरिक्त GC ट्यूनिंग के सर्वर प्रतिक्रिया समय में 15-20% सुधार दिया!
अपग्रेड शिप करने के बाद हमने Google और Bing की क्रॉल दरों में एक बड़ा उछाल देखा, जो हमारे जैसी साइट्स के लिए विशेष रूप से बहुत बढ़िया है जो सर्च इंजन ट्रैफिक से बहुत लाभान्वित होती हैं।
कूल, तो ये कितना कठिन था?
लगभग 150 जेम निर्भरताओं वाले एक बड़े रेल्स ऐप पर, अपग्रेड एक छोटे से कमिट और कुछ दिनों के टेस्टिंग में हुआ। हम अपने सभी सर्वर्स पर rvm चलाते हैं और शेफ के साथ प्रोविजन करते हैं, इसलिए अपने सभी सर्वर्स को 2.1 में अपग्रेड करना शेफ रोल फाइल में एक वर्जन नंबर बदलने जितना सरल था।
हमें क्या समस्याएं आईं?
हम अभी भी ट्रांसलिटरेशन के लिए iconv का उपयोग करते हैं, इसलिए हमें iconv जेम शामिल करना पड़ा, जो 2.x से हटाए गए बिल्ट-इन कार्यक्षमता को प्रतिस्थापित करता है। मैं रूबी-डिबग या डिबगर जेम को 2.x के तहत काम करने में कभी सक्षम नहीं था, इसलिए हम pry और pry-byebug पर स्विच हो गए। मैं अभी भी pry-byebug पर डिबगर जेम को प्राथमिकता देता हूं, लेकिन pry irb से इतना बेहतर है कि ये एक तरह से बराबर है। डेविड रोड्रिग्ज, byebug के लेखक, ने बताया कि pry-byebug के साथ मेरी समस्याएं शायद byebug के कारण नहीं थीं। वे पूरी तरह से सही थे! (ये वास्तव में byebug और pry के बीच इंटरैक्शन के कारण हुआ था)।
मिश्रित 1.9 और 2.1 वातावरण में, आपको बंडलर को 1.5.1 में अपग्रेड करना होगा। बंडलर के नए संस्करण के साथ, आप अपने Gemfile में 2.1 को एक प्लेटफॉर्म आवश्यकता के रूप में निर्दिष्ट कर सकते हैं:
gem 'iconv', '~> 1.0.2', :platform => [:mri_20, :mri_21]
ऐसा लगता है कि GitHub को 2.1 के साथ कुछ अन्य समस्याएं आईं, जिसका उल्लेख अमन गुप्ता ने इस गिस्ट में किया है: https://gist.github.com/tmm1/8393897, लेकिन हमने अभी तक कोई समस्या नोटिस नहीं की है।
शिप करने के बाद आप GC को ट्यून करना चाहेंगे और भी अधिक गति प्राप्त करने के लिए। अमन के पास इस पर बहुत सारे विवरणों के साथ एक अच्छी पोस्ट है कि इसे कैसे किया जाए: https://tmm1.net/ruby21-rgengc/. उनके ब्लॉग पर पूरी 2.1 श्रृंखला पढ़ने लायक है अगर आप अपने सस्ते, सरल रूबी अपग्रेड से अधिकतम लाभ प्राप्त करना चाहते हैं।