2015-06-14 4 views
15

मेरे रेल 4.1 अनुप्रयोग एक बैकएंड नौकरियों के लिए SSH के माध्यम से एक दूसरे, गैर प्राथमिक सर्वर से कनेक्ट। नतीजतन, जब रेल ऐप प्रतिदिन पुन: प्रारंभ होता है, तो एसएसएच कनेक्शन को लाइव/अप होना चाहिए (बल्कि दूसरा, गैर-प्राथमिक सर्वर लाइव/अप करने की आवश्यकता है), अन्यथा ऐप क्रैश हो जाता है। करने के लिए डिफ़ॉल्ट रूप से उत्सुक लोड हो रहा है production.rb (config.eager_load = true) में सही पर सेट किया जा रहा है इस वजह से है।उत्पादन.आरबी में eager_load को अक्षम करने का प्रदर्शन प्रभाव क्या है?

मैं उत्सुक भार को अक्षम करके इस निर्भरता को तोड़ने के लिए परीक्षा हूँ, लेकिन मैं प्रदर्शन प्रभाव पर अधिक से अधिक जानकारी प्राप्त करने में सक्षम नहीं हूँ। तो, मेरे सवाल कर रहे हैं ... eager_loadfalse पर सेट है

1) यदि, कि सरल नीचे एप्लिकेशन की स्टार्टअप समय धीमी हो जाएगी, या एप्लिकेशन बेसब्री से संसाधनों पहली बार वे मारा लोड हो जाएंगे?

3) यदि eager_load बस को बंद कर दिया है, क्या डिग्री होगा इस प्रभाव एप्लिकेशन (अधिक व्यक्तिपरक सवाल) बंद प्रदर्शन?

2) मॉडल है कि SSH कनेक्शन प्रदर्शन करती फ़ोल्डर app\models\legacy के अधीन हैं। eager_load को गलत करने के बजाय, क्या उस फ़ोल्डर को उत्सुक लोड किए गए संसाधनों से बाहर रखा जा सकता है? यदि हां, तो कैसे? मेरा मानना ​​है कि मुझे config.autoload_paths += Dir[Rails.root.join('app', 'models', '{**/}')] संपादित करने की आवश्यकता होगी लेकिन पूरी तरह से सुनिश्चित नहीं है।

production.rb:

# Eager load code on boot. This eager loads most of Rails and 
    # your application in memory, allowing both thread web servers 
    # and those relying on copy on write to perform better. 
    # Rake tasks automatically ignore this option for performance. 
    config.eager_load = true 
+1

उत्सुक लोडिंग को बदलने के बजाय, क्या आप कक्षा को बदल नहीं सकते हैं इसलिए वर्ग को लोड/पार्सिंग सीधे एसएसएच तक नहीं पहुंचता है? या इसे और अधिक मजबूत बनाओ? – nathanvda

उत्तर

1

स्थापना eager_load=false शायद को अपने ऐप्लिकेशन के स्टार्टअप गति को, क्योंकि लोड हो रहा है आवश्यक जब तक स्थगित कर दिया जाएगा -

विस्तृत जानकारी के लिए कृपया इस ब्लॉग पर एक नजर है।

हालांकि, दंड यह है कि आपका ऐप अधिक स्मृति का उपयोग करेगा (जो आमतौर पर सबसे दुर्लभ सर्वर संसाधन होता है)। मुझे लगता है कि आप भी अगर आप eager_load=false के साथ एक बहु-क्रम सर्वर (जैसे प्यूमा) का उपयोग सूत्रण कीड़े में पड़ सकते हैं संदेह है।

चूंकि रेल स्वचालित रूप से अपने उत्सुक लोड पथों में सभी app/* निर्देशिकाओं को शामिल करता है, इसलिए मैं app/models/legacy को बाहर करने के लिए आसान तरीका नहीं सोच सकता, जबकि सब कुछ उत्सुकता से लोड हो रहा है।

इसके बजाय, आप app/models/legacy की सामग्री को उदा। legacy/ अपनी परियोजना की जड़ में है और उस जोड़ने autoload_paths रहे हैं:

config.autoload_paths += %W(#{config.root}/legacy) 

अब रेल अभी भी उन फ़ाइलों को खोजने के लिए सक्षम हो जाएगा, लेकिन वे बेसब्री से उत्पादन में लोड नहीं किया जाएगा।

+0

धन्यवाद मैट - उत्तर के रूप में आपकी प्रतिक्रिया स्वीकार कर लिया। – user1322092

संबंधित मुद्दे