2012-03-16 15 views
14

पूरा करने के लिए मेरी देव सैंडबॉक्स मेंरेक संपत्ति: precompile अत्यंत

RAILS_ENV=production rake assets:precompile 

4 मिनट से अधिक पूरा करने के लिए ले जा रहा है समय लग रहा है। क्या यह सामान्य है। Heroku पर नौकरी करने के लिए 10 मिनट से अधिक समय ले रहा है और कभी-कभी समय समाप्त हो रहा है। क्या इसका पता लगाने और/या इसे गति देने का कोई तरीका है?

अद्यतन

मैं सीएसएस बनाम संकलन के जे एस चरणों

3.7 s  js 
175 s   css 

संख्या यहाँ

---------------------- 
/Users/bradphelan/.rvm/gems/[email protected]/gems/sprockets-2.1.2/lib/sprockets/processing.rb 
---------------------- 
266  # Assign a compressor to run on `application/javascript` assets. 
267  # 
268  # The compressor object must respond to `compress` or `compile`. 
269  def js_compressor=(compressor) 
270  expire_index! 
271 
272  unregister_bundle_processor 'application/javascript', :js_compressor 
273  return unless compressor 
274 
275  register_bundle_processor 'application/javascript', :js_compressor do |context, data| 
276 
277   timeit "js" do 
278   compressor.compress(data) 
279   end 
280 
281  end 
282  end 

और

---------------------- 
    /Users/bradphelan/.rvm/gems/[email protected]/gems/sprockets-2.1.2/lib/sprockets/processing.rb 
    ---------------------- 
    241 
    242  # Assign a compressor to run on `text/css` assets. 
    243  # 
    244  # The compressor object must respond to `compress` or `compile`. 
    245  def css_compressor=(compressor) 
    246  expire_index! 
    247 
    248  unregister_bundle_processor 'text/css', :css_compressor 
    249  return unless compressor 
    250 
    251  register_bundle_processor 'text/css', :css_compressor do |context, data| 
    252   timeit "css" do 
    253   compressor.compress(data) 
    254   end 
    255  end 
    256  end 
instrumenting द्वारा किए गए थे प्रोफाइल

timeit कॉल जोड़ा सा समय

def timeit context 
    s = Time.now 
    yield.tap do 
    e = Time.now 
    d = e - s 
    puts "#{d*1000}\t #{context}" 
    end 
end 
+0

यहाँ कुछ चीजें मैं बढ़ती प्रदर्शन पर पाए जाते हैं ... वास्तव में एक जवाब नहीं है; कुछ पॉइंटर्स की तरह: [1]: http://stackoverflow.com/questions/9546831/rake-assetsprecompile-is-slooooow-any-way-to-speed-it-up [2]: http: // stackoverflow .com/प्रश्न/8568786/खराब समय-प्रदर्शन-के-रेक-एसेट्सप्रोम्पाइल [3]: http://www.ruby-forum.com/topic/2538285 – ScottJShea

+0

असल में उन लिंक में से एक संभावित उम्मीदवार की तरह दिखता है। मुझे संदेह था कि किसी भी तरह से रेल ऐप को कई बार लोड किया जा रहा था। http://www.ruby-forum.com/topic/2538285#1026719 – bradgonesurfing

+0

ओह अच्छा ... मुझे चिंता थी कि मेरा जवाब कष्टप्रद होने के लिए इतना व्यापक होगा। – ScottJShea

उत्तर

3

hackety हैक समाधान रास्ते से हट मानक सास संपीड़न इंजन पैच बंदर को हो रहा है कर रही है। मैं अपने application.rb

module Sass 
    module Rails 
    class CssCompressor 
     def compress(css) 
     css 
     end 
    end 
    end 
end 

के शीर्ष फ़ाइल आकार में अंतर बंदर पैच से पहले 124K और 125k के बाद था और परिमाण गति में सुधार के एक आदेश में जोड़ा है।

+0

और उसकेोकू संपत्ति निर्माण 52 सेकंड तक नीचे हैं जो अभी भी बेकार है लेकिन 15 मिनट से बेहतर है। – bradgonesurfing

+3

रूबी 1.9.3 और रेल 3.2.1 – Paul

+0

के साथ मदद नहीं की थी रूबी 2 रेल 4 पर भी काम नहीं किया। –

1

सबसे अच्छा विकल्प स्थानीय रूप से संकलित, प्रतिबद्ध और उत्पादन के लिए प्रीकंपाइल कार्य को अक्षम करने, सामान्य के रूप में तैनात है। मैं इसे अपने सभी उत्पादन ऐप्स के लिए कर रहा हूं।

विकास मोड में उन संकलित संपत्तियों को प्राप्त करने के लिए (गतिशील पाइपलाइन संकलन को ओवरराइड करना, जो आपको चाहिए) निम्नलिखित कार्य करें।

development.rb जगह में निम्न पंक्ति:

config.assets.prefix = "/dev-assets" 

इस ओवर-द सवारी जो कुछ भी (सामान्य रूप से "/ संपत्ति") application.rb में सेट है।

तुम भी application.rb में इस की आवश्यकता होगी:

config.assets.initialize_on_precompile = false 

अपने डेटाबेस से कनेक्ट करने की कोशिश कर काम बंद हो जाता है यही कारण है कि। (सावधान रहें यदि आप अपनी संपत्ति में ActiveRecord मॉडल का जिक्र कर रहे हैं, क्योंकि यह काम नहीं करेगा)।

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

रेफरी my blog post

+0

कृपया टिप्पणियां और विवरण पढ़ें। सीएसएस कंप्रेसर के साथ एक समस्या है जो स्थानीय स्तर पर या उत्पादन में लंबे समय तक संकलित होती है। – bradgonesurfing

5

मैं ऑन रेल्स 3.2.13 हूँ - मैं सीएसएस संपीड़न एक बेहद लंबे समय लेने के साथ ही समस्या थी।ठीक करने के लिए:

Gemfile में जोड़ें:

gem 'yui-compressor' 

config/वातावरण/production.rb में:

config.assets.css_compressor = :yui 
config.assets.js_compressor = :yui 

रेक संपत्ति: precompile उन परिवर्तनों के बिना: 325 सेकंड

रेक संपत्ति: उन परिवर्तनों के साथ precompile: 79 सेकंड

रेक संपत्ति: कोई संपीड़न के साथ precompile: 45 सेकंड

+0

यह मेरे लिए काम नहीं किया। समय लगभग 6 मिनट के बराबर था! –

+0

क्या आप वाकई उत्पादन मोड में प्रीकंपल हैं? –

+0

मैं capistrano का उपयोग कर रहा था। मुझे इसके बारे में काफी यकीन है। –

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