2011-09-02 17 views
8

मैं बस रेल 3.1 से परिचित हो रहा हूं, और मैंने कुछ समय पुराना प्रोजेक्ट अपडेट करने और काम करने की कोशिश कर रहा है कि नई परिसंपत्ति पाइपलाइन विकास मोड बनाम उत्पादन में कैसे व्यवहार करती है।उत्पादन से पहले रेल संपत्ति परिसंपत्ति पाइपलाइन में आप त्रुटियों को कैसे पकड़ते हैं?

डिफ़ॉल्ट config.assets.precompile सेटिंग केवल application.css और application.js आशीर्वाद देता है, इरादा है कि सब कुछ एक भी स्टाइलशीट और एक एकल जावास्क्रिप्ट फ़ाइल के रूप में पेश की जानी चाहिए साथ।

जाहिर है

यहाँ स्थिति मैं अपने सैंडबॉक्स परियोजना के साथ जब उत्पादन के लिए जा रहा में भाग है जब हम उस नहीं करना चाहते, तो हम है कि config चर में सूची में आइटम जोड़ सकते हैं स्थितियों रहे हैं ...:

  1. विकास में साइट ब्राउज़ की, देखा कि सब कुछ काम कर रहा था। संपत्तियों को अलग फाइलों के रूप में जोड़ा गया था और साइट सही ढंग से प्रदर्शित की गई थी।
  2. साइट को मेरे सर्वर पर अपलोड किया गया, और इसे उत्पादन में काम करने की कोशिश की। पहली त्रुटि यह कह रही थी कि "ie.css" (एक सशर्त स्टाइलशीट) precompiled नहीं है। (मैं सफारी में था और इस स्टाइलशीट को भी डाउनलोड नहीं किया जाएगा: पृष्ठ को प्रस्तुत करने से पहले त्रुटि stylesheet_link_tag सहायक से उठाई गई थी।)
  3. रण rake assets:precompile और फिर से प्रयास किया।
  4. अपमानजनक आइटम config.assets.precompile पर जोड़ा गया और फिर से प्रयास किया गया।
  5. जब तक यह किसी अन्य संपत्ति त्रुटि को हिट नहीं करता तब तक त्रुटि को क्रैश कर दिया गया।
  6. गोटो 3.

यह कैसे पता करने के लिए जानते हुए भी नहीं, मैं चारों ओर हलकों में कई बार जब तक मैंने सोचा कि मैं सभी परिसंपत्तियों मिल गया और साइट उत्पादन में प्रतिपादन किया गया था। फिर मैंने इसे एमएसआईई में करने की कोशिश की और एक और त्रुटि मारा 500: "belated_png_fix.js" सशर्त रूप से लोड किया जा रहा था, और तब तक यह फसल नहीं हुआ।

तो मेरे सवाल, परीक्षण और त्रुटि या एकीकरण परीक्षण पर एक भारी निर्भरता के अलावा अन्य है, मैं कैसे भविष्यवाणी कर सकते हैं कि मेरी साइट बाहर बम से उड़ाने की नहीं जा रहा है जब संपत्ति पाइपलाइन पता चलता है कि कुछ स्टाइलशीट या जावास्क्रिप्ट नहीं जोड़ा गया था precompile सूची में?

मैं भी उत्सुक हूं कि क्यों लापता स्टाइलशीट संपत्ति को पूरे पृष्ठ को केवल मांग पर संकलित करने या उस संपत्ति के अनुरोध के 404 की सेवा करने के बजाय 500 त्रुटि करने का कारण बनना चाहिए। क्या यह "जानबूझकर विफल" के लिए एक जानबूझकर डिजाइन है?

+0

मैंने हाल ही में एक पुरानी ऐप को संपत्ति पाइपलाइन में परिवर्तित कर दिया और इसमें कोई समस्या नहीं थी। यह समझने में मुझे कुछ समय लगा कि सबकुछ एक साथ कैसे काम करता है। अपने प्रश्न का उत्तर देने के लिए, क्या आप अपने सीएसएस और जेएस फाइलों की सामग्री दिखा सकते हैं, विशेष रूप से आवश्यक बयानों? मुझे यह भी रूचि है कि आप इसे देखने से कैसे बुला रहे हैं। आखिर में वे सभी ऐप/संपत्ति में हैं या आप lib/संपत्ति और विक्रेता/परिसंपत्तियों का भी उपयोग कर रहे हैं? –

उत्तर

1

मुझे रेल 3.1 के साथ भी इसी तरह की समस्याएं थीं। कैपिस्ट्रानो मल्टी स्टेज को स्थापित करना और स्टेजिंग सर्वर प्राप्त करना सबसे अच्छी बात है।

यदि किसी भी कारण से यह संभव नहीं है, तो अपने कंप्यूटर पर वर्चुअल मशीन स्थापित करें और अपने सर्वर वातावरण को दोहराने का प्रयास करें।

+0

हां, मैं पहले से ही यह कर रहा हूं, अनिवार्य रूप से। यह "परीक्षण-और-त्रुटि" के शीर्षक के अंतर्गत आता है (जो निश्चित रूप से कुछ एकीकरण परीक्षणों के साथ स्वचालित हो सकता है ... शायद कोई बेहतर तरीका नहीं है।) –

0

यह अधिक हो सकता है, लेकिन यह मेरे लिए काम करता है (यह मुझे साफ, संकलित संपत्ति देता है)। मेरे पास यह है .bash_profile फ़ाइल में।

alias ggo='bundle exec rake assets:clean && bundle exec rake assets:precompile && git add . && git commit -m "precompile" && git push origin master && cap deploy' 

और यह मेरी कॉन्फ़िगरेशन/वातावरण/उत्पादन में है।rb (बलों उत्पादन जब जरूरत संकलित करने के लिए, अगर मैं चलाने के लिए "GGO" पहले याद करने की जरूरत नहीं होनी चाहिए):

config.assets.compile = true 

तो, मेरे कार्यप्रवाह है: 1. कोड 2. Git & जोड़ने गिट प्रतिबद्ध 3. अगर मैंने सीएसएस/एसएएसएस/जेएस/कॉफीस्क्रिप्ट फाइलों को छुआ, तो मैं गुगो चलाता हूं। अन्यथा, मैं एक सामान्य टोपी तैनाती करता हूं।

+0

सहायक चाल, लेकिन समस्या यह है कि प्रीकंपाइल केवल उन वस्तुओं पर कार्य करती है जो इसे जानता है के बारे में। यह चाल किसी भी तरह से पता लगा रही है कि विभिन्न विचारों से कौन से संसाधन जुड़े हुए थे और यह सुनिश्चित करना कि वे सूची में शामिल हो जाएं। –

1

निरंतर तैनाती एक बड़ी बात है, और आपको उस बिंदु पर जाना चाहिए जहां यह इतना आसान है कि वास्तव में यह दर्दनाक नहीं है। कहा जा रहा है कि, config.assets.precompile रेगेक्स ले सकता है, तो आप शीर्ष स्तर के स्पॉकेट्स "मैनिफेस्ट" फ़ाइलों के लिए मानक के साथ कैसे आते हैं, या उन चीज़ों के लिए एक मानक उप फ़ोल्डर जो बंडल नहीं किए जाएंगे? (ध्यान दें कि मैंने वास्तव में अभी तक यह कोशिश नहीं की है ...)

2

मैंने अभी assets_precompile_enforcer नामक एक मणि जारी किया है, जो सुनिश्चित करता है कि डेवलपर्स config.assets.precompile पर विकास कर रहे हैं, जबकि वे विकास कर रहे हैं। यदि आप javascript_include_tag या stylesheet_link_tag के माध्यम से कोई संपत्ति शामिल करते हैं, तो यह एक अपवाद उठाया जाएगा, और यह config.assets.precompile में फ़िल्टर से मेल नहीं खाता है।

इसका मतलब है कि उत्पादन में तैनाती के बाद खोज के बजाय संपत्ति त्रुटियों को पकड़ा जाएगा।

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