8

मेरे पास एक रेल 4 ऐप है जो मैं उसकेोकू पर होस्ट कर रहा हूं। बहु-थ्रेडेड सर्वर (प्यूमा) https://devcenter.heroku.com/articles/concurrency-and-database-connectionsहेरोकू रेल - सक्रिय रिकॉर्ड पोस्टग्रेस कनेक्शन बंद करें

जब मैं अपने ऐप के लिए लोड परीक्षण चलाता हूं तो मुझे डीबी कनेक्शन पूल का प्रबंधन करने के बारे में कुछ विशिष्ट सलाह दी जाती है, मुझे एक त्रुटि मिली- डीबी से कनेक्ट नहीं हो सकता है। जब प्रत्येक पृष्ठ पर हिट किया जा रहा था, रेल सक्रिय रिकॉर्ड शुरू करते हैं, भले ही मैं उस पृष्ठ पर कोई प्रश्न नहीं उठा रहा हूं, या किसी भी मॉडल का संदर्भ नहीं दे रहा हूं।

मेरा प्रश्न है:

मैं कैसे श्वेत सूची (या ब्लैकलिस्ट) के एक प्रकार के कर सकते हैं ताकि सक्रिय रिकॉर्ड इन विशिष्ट नियंत्रक कार्यों के लिए एक डाटाबेस कनेक्शन के साथ आरंभ नहीं किया है? एक प्रारंभिक में?

आदर्श रूप से मैं उसकेोकू (40 कनेक्शन) पर सस्ता पोस्टग्रेस सेवा चलाऊंगा क्योंकि मुझे पता है कि मेरा ऐप अक्सर डीबी का उपयोग नहीं करता है। यदि यातायात उच्च हो जाता है कि 40 कनेक्शन चीजें गलती शुरू हो जाएंगी, जो उन ऐप के लिए मूर्खतापूर्ण प्रतीत होता है जो उन अनुरोधों पर डीबी का उपयोग नहीं कर रहे थे।

मैं कैसे एक पूरे अनुप्रयोग के लिए सक्रिय रिकॉर्ड को अक्षम करने के बारे में पढ़ा: Disable ActiveRecord for Rails 4

लेकिन यह कैसे मैं चुनिंदा यह सक्षम करूं? क्या कोई अन्य विभिन्न प्रदर्शन विचार यहाँ (इन बातों को या किसी अन्य gotchas नहीं उत्सुक लोड हो रहा है) के द्वारा

+0

उपयोग कनेक्शन पूलिंग। –

उत्तर

0

में आप application_controller.rb

before_filter :maybe_disconnect_db 

def maybe_disconnect_db 
    ActiveRecord::Base.remove_connection() if ActiveRecord::Base.connected? 
end 

def maybe_connect_db 
    ActiveRecord::Base.establish_connection() unless ActiveRecord::Base.connected? 
end 
फिर प्रत्येक नियंत्रक/कार्रवाई की जरूरत है के लिए

db कनेक्शन जोड़ने हैं

skip_before_filter :maybe_disconnect_db, #only or unless filter here 
before_filter  :maybe_connect_db, #only or unless filter here 

यह किसी भी विशिष्ट डीबी अनुरोध के लिए कनेक्शन स्थापित करना चाहिए, और किसी भी अनुरोध के लिए डिस्कनेक्ट करना चाहिए, जिसकी आवश्यकता नहीं है, जबकि बिना किसी कार्रवाई के एक पंक्ति में एकाधिक डीबी अनुरोधों को संभालने, और एक पंक्ति में कई गैर डीबी अनुरोध कार्रवाई के बिना।

ActiveRecord::Base.remove_connection

ActiveRecord::Base.establish_connection

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