2011-09-03 19 views
5

पर रेल 3.1 को अपडेट करते समय संपत्ति पाइपलाइन मैंने रेलवे 3.0 से 3.1 तक हेरोोकू पर अपना ऐप अपग्रेड कर लिया है, और मैं संपत्ति पाइपलाइन काम करने की कोशिश कर रहा हूं। मुख्य मुद्दा यह है कि मैं से Heroku लाइनों के निम्नलिखित प्रकार लॉग ऑन पढ़ सकते हैं, हर संपत्ति के लिए:हेरोकू

2011-09-03T16:35:28+00:00 app[web.1]: cache: [GET /assets/border-a3c571a354b9381740db48aeebfaa63a.jpg] miss 

अगर मैं पाइप लाइन सही ढंग से समझ, यह नहीं होना चाहिए "याद आती है" हर अनुरोध के लिए मैं एक से बनाना ब्राउज़र, लेकिन यह कैश में पाया जाना चाहिए।

पढ़ना Heroku डॉक्स आप इस स्पष्टीकरण पा सकते हैं:

Rails 3.1 provides an assets:precompile rake task to allow the compilation penalty to be paid up front rather than each time the asset is requested. If this task exists in your app we will execute it when you push new code. 

लेकिन यह कैसे है कि "संपत्ति: precompile" चाहिए काम हो? मैंने पता लगाने की कोशिश करने के लिए रेलवे 3.1 के साथ एक परियोजना बनाने की कोशिश की, लेकिन एक नंगे परियोजना में ऐसा कोई काम नहीं है। या क्या मैं कुछ न कुछ भूल रहा हूं? मैं कैसे कर सकता हूं कि संपत्ति कैश में पाई जाती है? शायद विन्यास के साथ एक मुद्दा है।

ये मेरी उत्पादन कॉन्फ़िग फ़ाइल के विकल्प हैं:

config.serve_static_assets = false 
config.assets.compress = true 
config.assets.compile = true # If I turn this off I get a 500 error and logs say that an asset isn't compiled 

मेरे application.rb इस लाइन है:

config.assets.enabled = true 

धन्यवाद आपकी मदद के लिए एक बहुत!

+0

होने के लिए मैं Heroku पर संपत्ति संकलन सीधे, compliled संपत्ति के साथ अपने स्थानीय भंडार नहीं प्रदूषण फैलाने की आवश्यकता है। कमांड का उपयोग करें: उसकेोकू रन रेक संपत्तियां: प्रीकंपाइल –

उत्तर

4

मैं एक ही बात सोच रहा था, लेकिन यहाँ मदद करने के लिए यह पता लगाने अगर अपनी संपत्ति को लाइव-संकलन या नहीं

  1. रन rake assets:precompile स्थानीय स्तर पर
  2. अपने सीएसएस में कुछ परिवर्तन करने हैं एक टिप है लेकिन नहीं है रेक कार्य
  3. Git, जोड़ने के लिए प्रतिबद्ध और Heroku को

धक्का तो परिवर्तन चरण 2 में बनाया वह पर दिखाई फिर से चलाएं roku, तो आप जानते हैं कि आपका ऐप लाइव-कंपाइलिंग

भूलें कि अब आप http कैशिंग का प्रभारी हैं क्योंकि वार्निश अब सेलेडॉन पर शामिल नहीं है, इसलिए आपको रैक कैश सेट करने और स्वयं को याद करने की आवश्यकता है: Heroku

  • Heroku डॉक्स पर पर http caching
  • सेटअप rack-cache

    • Heroku डॉक memcached साथ पर memcached

    लेकिन हाँ, मैंने पाया यह बहुत puzzling

  • +0

    आपके उत्तर के लिए धन्यवाद, यह महत्वपूर्ण जानकारी से भरा है। – alvatar

    1

    आप true को config.serve_static_assets सेट और

    config.action_dispatch.x_sendfile_header = "X-Sendfile" 
    

    साथ की कोशिश कर सकते हैं अपने config/environments/production.rb फ़ाइल को जोड़ा गया?

    जब आप अपने कोड को हेरोकू में दबाते हैं तो आपको स्लग कंपाइलर AFAICT द्वारा घोषित प्रीकंपलिंग देखना चाहिए।

    +0

    "-----> रेल संपत्ति परिसंपत्ति पाइपलाइन के लिए ऐप तैयार करना" प्रकट होता है, लेकिन इससे पहले भी ऐसा हुआ। अभी भी कैश की याद आ रही है ... – alvatar

    +0

    क्या इसके बजाय यह नग्गिक्स निर्देश का उपयोग नहीं करना चाहिए? 'config.action_dispatch.x_sendfile_header = 'एक्स-एक्सेल-रीडायरेक्ट' – tibbon

    1

    सुनिश्चित करें कि आप Heroku "Cedar" stack पर हैं। फिर Heroku will automatically precompile your assets during slug compilation

    नोट: मुझे अभी भी "कैश मिस" मिल रहा है, लेकिन मुझे नहीं लगता कि यह वास्तव में सच है क्योंकि यदि आपकी संपत्ति संकलित नहीं की गई थी तो आपका ऐप काम नहीं करेगा।

    +3

    हाँ, मेरे पास सीडर स्टैक है। यदि आपके पास "लाइव संकलन" सक्रिय है, तो यह कैश मिस होने पर हर बार संकलित करता है। असल में, अगर मैं इस विकल्प को निष्क्रिय करता हूं ('config.assets.compile = true' के साथ) तो यह बिल्कुल काम नहीं करता है। – alvatar

    5

    इसके अलावा, तेजी से संपत्ति precompiles लिए http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets

    पर एक नज़र डालें, तो आप आंशिक रूप से गलत पर config.assets.initialize_on_precompile सेट करके अपने आवेदन लोड कर सकते हैं config/application.rb में, हालांकि उस स्थिति में टेम्पलेट्स एप्लिकेशन ऑब्जेक्ट्स या विधियों को नहीं देख सकते हैं। Heroku यह गलत