25

मेरे पास एक रनिंग रेल 3.2.1 एप्लिकेशन है, जिसे मैं deploy/assets के साथ कैपिस्ट्रानो के माध्यम से तैनात कर रहा हूं जो deploy:assets:precompile कार्य चलाता है।मैं रेल 3 संपत्तियों को तेजी से प्रीकंपाइल कैसे बना सकता हूं?

सब कुछ ठीक काम करता है, सिवाय इसके कि संकलन स्वयं वास्तव में धीमा है। मेरे पास इतना सीएसएस और जावास्क्रिप्ट नहीं है (कुल 8200 लाइनें)।

संपत्तियों को संकलित करने में आमतौर पर लगभग 1-3 मिनट लगते हैं, जो पूरे तैनाती के समय का लगभग 9 0% है।

क्या इसे अनुकूलित करने का कोई तरीका है? शायद परिसंपत्तियों को संकलित करने या किसी भी तरह इसे अनुकूलित करने के लिए एक अलग प्रक्रिया का उपयोग करें?

मैं 1.9.2-पी 2 9 0, रेल 3.2.1 पर लिनोड 512 पर ऐप चला रहा हूं और therubyracer मणि का उपयोग कर रहा हूं, यदि यह किसी भी प्रासंगिकता का है।

+0

इसे सबसे तेज़ सर्वर पर संकलित करें और इस संकलन के बाद इसे प्रतिबद्ध करें। – shingara

+0

क्या आपने config.assets.initialize_on_precompile को सेट किया है? –

उत्तर

21

यह तेजी से चलाने के लिए इसका उत्तर नहीं है, लेकिन जहां तक ​​"अलग प्रक्रिया" जाती है, आप कैपिस्ट्रानो को केवल पूर्व संपत्तियों को ही बता सकते हैं जब आपने वास्तव में अपनी संपत्ति में कोई बदलाव किया है। आप एक कस्टम assets:precompile ऐसा कुछ करना चाहते हैं, जो मौजूदा और नए तैनात कोड के बीच गिट लॉग को देखेंगे। मेरे लिए, यह महान काम किया है और अब मैं केवल जब संपत्तियों को अपडेट करने में धीमी गति से तैनाती से निपटने के लिए की जरूरत है:

namespace :deploy do 
    namespace :assets do 
    task :precompile, :roles => :web, :except => { :no_release => true } do 
     from = source.next_revision(current_revision) 
     if capture("cd #{latest_release} && #{source.local.log(from)} vendor/assets/ app/assets/ | wc -l").to_i > 0 
     run %Q{cd #{latest_release} && #{rake} RAILS_ENV=#{rails_env} #{asset_env} assets:precompile} 
     else 
     logger.info "Skipping asset pre-compilation because there were no asset changes" 
     end 
    end 
    end 
end 

स्रोत: http://www.bencurtis.com/2011/12/skipping-asset-compilation-with-capistrano/

16

मैं सिर्फ रेल के अंदर इस समस्या को हल करने के लिए एक मणि लिखा है, turbo-sprockets-rails3 बुलाया । यह आपकी assets:precompile को केवल बदली गई फ़ाइलों को पुन: संकलित करके गति देता है, और केवल सभी संपत्तियों को उत्पन्न करने के लिए संकलित करता है। यह Capistrano के लिए बॉक्स से बाहर काम करता है, क्योंकि आपकी संपत्ति निर्देशिका रिलीज के बीच साझा की जाती है।

यह शानदार होगा अगर आप turbo-sprockets-rails3 मणि का परीक्षण करने में मेरी सहायता कर सकते हैं, और अगर आपको कोई समस्या है तो मुझे बताएं।

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