2011-10-03 4 views
6

जब रेल शुरू होता है तो यह अपनी सभी निर्भरताओं (रत्न) को प्रीलोड करता है, जिसके परिणामस्वरूप बहुत धीमी स्टार्टअप समय होता है। एक मध्यम आकार की परियोजना में मैं काम कर रहा हूं, रेल का प्रारंभ समय 10-15 सेकंड मशीन पर निर्भर करता है।क्यों बूट समय के दौरान रेल अपनी सभी निर्भरताओं (रत्न) preloads?

हालांकि यह उत्पादन में कोई मुद्दा नहीं है, यह विकास में एक बड़ा दर्द है। विशेष रूप से टीडीडी/बीडीडी काम करते समय। परीक्षणों को तेज करने के लिए समाधान हैं (जैसे स्पार्क), लेकिन वे स्वयं के मुद्दों को पेश करते हैं।

मेरा प्रश्न है: स्टार्टअप समय के दौरान सब कुछ प्रीलोड करने के बजाय, प्रत्येक कोड फ़ाइलों में आवश्यक निर्भरताओं की आवश्यकता क्यों नहीं है?

मैन्युअल के डाउनसाइड्स की आवश्यकता क्या है? कोड की अतिरिक्त लाइनें?

+0

http://stackoverflow.com/questions/3418895/how-to-reload-all-gems-in-rails-3 – jimworm

+0

टीडीडी शैली में काम करते समय ऑटोटेस्ट या समान टूल का उपयोग करने पर विचार करें। – taro

+0

@taro मैं गार्ड-आरएसपीईसी का उपयोग कर रहा हूं (ऑटोटेस्ट जैसा ही काम करता है), लेकिन यह स्टार्टअप समय में मदद नहीं करता है। – arikfr

उत्तर

3

रेल PHP नहीं है। कुछ संसाधन स्वत: लोड हो जाते हैं, लेकिन जिनकी आपको आवश्यकता हो सकती है उन्हें बूट/प्रारंभिकरण पर लोड किया जाता है क्योंकि अनुरोध किए जाने से पहले ऐसा करना बेहतर होता है, इसलिए एप्लिकेशन अनुरोध पर आलसी लोड करने से तैयार है, धीमा हो रहा है पहला अनुरोध विधियों की विधियों और लोडिंग की आखिरी मिनट की ऑन-द-फ्लाई परिभाषा अभी भी होती है, को केवल 10-15 सेकंड पर भार काटने का समय लगता है, लेकिन यदि आप उस लोड समय के 5-10 सेकेंड काटते हैं, इसे पहले अनुरोध पर ही लगाया जाएगा। अच्छा नहीं, है ना?

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

require 'rails/all' 

साथ: उदाहरण के लिए, यदि आप एक रेल परियोजना है कि सक्रिय रिकॉर्ड की जरूरत नहीं है, आप की जगह ले सकता

require "action_controller/railtie" 
require "action_mailer/railtie" 
require "active_resource/railtie" 
require "rails/test_unit/railtie" 

... अपने application.rb में लोड हो रहा है में कटौती करने के लिए (और से बचने डेटाबेस के बारे में त्रुटियां मौजूद नहीं हैं)।

+0

यह समझ में आता है, लेकिन यदि समस्या केवल उत्पादन/पहले अनुरोध में है, तो इसे हल करने के अन्य तरीके भी हैं। विकास पर जुर्माना क्यों लगाया? – arikfr

+0

विकास और उत्पादन को एक साथ रखने के लिए, मुझे लगता है। रेल कई कक्षाओं को कैश न करके विकास में समस्या को कम करने में मदद करता है, उन्हें आपके लिए प्रत्येक अनुरोध पर पुनः लोड कर रहा है ताकि आपको सर्वर को रोकने और शुरू करने की आवश्यकता न हो। यदि आपके पास इसे पूरा करने के तरीके पर अन्य अनुशंसाएं हैं, तो मुझे उन्हें सुनना अच्छा लगेगा, और मुझे यकीन है कि रेल टीम सुधार के साथ एक पैच देखना पसंद करेगी। – coreyward

+0

यह जुर्माना नहीं है। यह व्यवसाय करने की लागत है - आपको अभी भी अपने विकास सर्वर के लिए पहले पृष्ठ लोड पर देरी होगी। यह सिर्फ एक मामला है कि आपकी कमांड लाइन में देरी हो रही है या आपके ब्राउज़र में देरी हो रही है। – Kelly

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