5

मेरे पास कुछ आईफोन क्लाइंट परीक्षण हैं जो मेरे विकास रेल सर्वर के खिलाफ चलते हैं। यदि मैं रेल कॉन्फ़िगरेशन में क्लास कैशिंग चालू करता हूं तो पूरा सूट तीव्रता का क्रम चलाता है। दूसरी तरफ, जब मैं वास्तव में परीक्षण नहीं चला रहा हूं तो विकास धीमा हो जाता है।क्या मैं रैंक 3 में प्रोग्रामेटिक रूप से config.cache_classes को बदल सकता हूं?

मैं चाहता हूं कि टेस्ट सूट कक्षा कैशिंग को चालू करने के लिए शुरुआत में एक कार्रवाई को हिट करे और अंत में कक्षा कैशिंग को बंद कर दें।

क्या यह भी संभव है? यदि हां, तो कैसे?

उत्तर

0

मुझे नहीं लगता कि आप जो सुझाव देते हैं वह काम करेगा।

लेकिन मेरा सुझाव है कि आप गलत समाधान की तलाश कर रहे हैं।

यदि आप अपने आईफोन परीक्षण, से अपने विकास डेटाबेस तक पहुंचना चाहते हैं तो नया वातावरण क्यों न जोड़ें।

जोड़े एक नई फ़ाइल config/वातावरण/iphone_dev.rb

require File.dirname(__FILE__)+"/development.rb" 
config.cache_classes = true 

और अपने database.yml (या mongoid.yml या जो कुछ भी)

iphone_dev: 
    host: localhost 
    database: my_app_development 

कोई कारण डेटाबेस नहीं कर सकते है में हो ही

अब बस चलाने rails server -eiphone_dev -p3001

आप चाहिए एक सर्वर है, लगभग आपके dev सर्वर, जैसा ही है लेकिन कैशिंग सक्षम के साथ एक अलग पोर्ट पर चल रहा है।

+0

यह एक बुरा विचार नहीं है कि दो सर्वर समानांतर में चल रहे हों लेकिन यह समस्या को हल नहीं करता है। जब भी मैं परिवर्तन करता हूं तब भी मुझे इस नए परीक्षण सर्वर को पुनरारंभ करने की आवश्यकता होगी। – ilya

+0

मुझे लगता है कि आपको 'कष्टप्रद पुनरारंभ के साथ तेज़ अनुरोध' या 'धीमे अनुरोध जो स्वत: लोड परिवर्तन' –

+0

हाँ, यह वर्तमान मामला है। मैं सिर्फ कुछ समय के लिए "फास्ट मोड" चालू करने में सक्षम होना चाहता हूं। – ilya

1

कुछ गंभीर हैकिंग के बिना नहीं। यह सुनिश्चित करने के लिए रेलों को बहुत सारी परेशानी होती है कि आपकी फ़ाइलों को प्रत्येक अनुरोध पर पुनः लोड किया जाता है (जब cache_classes=false)। cache_classes विन्यास चर के मूल्य कई स्थानों में initializers द्वारा किया जाता है कम से कम नहीं है जो जा रहा है की:

  • require का उपयोग कर रूबी फ़ाइलें लोड करने के लिए जब cache_classes true (जिसका अर्थ है कि वे अब फिर से लोड करने कर रहे हैं)
  • की स्थापना है डिस्पैचर कॉलबैक हर अनुरोध पर आवेदन reaload जब cache_classesfalse

आप cache_classes चर के मूल्य के लिए उपयोग किया करते है, और तुम भी बदल देते हैं तो आप की तरह कर सकते हैं:

Rails.configuration.cache_classes = true 

लेकिन, इस initializers जहां कि मूल्य जब रेल एप्लिकेशन शुरू होता है केवल एक बार चलाने के लिए किया जाता है के रूप में चल रहा है रेल उदाहरण पर कोई प्रभाव नहीं पड़ेगा।

इसका मतलब यह है कि, जब तक कि आप कुछ गंभीर समय और हैकिंग प्रयास निवेश करने के लिए तैयार नहीं होते हैं, तो आप वास्तव में अपने सर्वर को पुनरारंभ करने से बच नहीं सकते हैं। तो, आपको जो देखने की आवश्यकता है वह आपके परीक्षण सूट के माध्यम से इस पुनरारंभ प्रक्रिया को नियंत्रित कर रहा है।

उदाहरण के लिए आप rails from within rails को पुनरारंभ करने का प्रयास कर सकते हैं।यह आपको एक क्रिया को परिभाषित करने की अनुमति देगा कि आपका परीक्षण सूट निष्पादन शुरू करने से पहले सही हो सकता है (सही मोड में सर्वर को पुनरारंभ करने के लिए), और सभी परीक्षणों के बाद सर्वर हिट कर सकता है, cache_classes सेट के साथ सबकुछ पुनरारंभ करने के लिए यह क्या होता था। आप पर्यावरण चर like this post suggests के माध्यम से कैश कक्षाओं के मूल्य को नियंत्रित करेंगे।

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

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

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