पर तैनाती करते समय रेल 3.1 में टूटी हुई प्रीकंपील्ड संपत्तियां मैं रेल 3.1 का उपयोग करने के लिए रेल 3 ऐप अपडेट करने की प्रक्रिया में हूं और इसके हिस्से के रूप में, नई संपत्ति पाइपलाइन का उपयोग कर रहा हूं। अब तक, मुझे एक भी परेशान करने वाली समस्या से अलग सब कुछ मिल गया है जिसे मैं हल नहीं कर सकता।उप-यूआरआई
आवेदन और इसकी सभी संपत्तियां विकास में ठीक काम करती हैं, लेकिन उत्पादन में इसे यात्री (http://the-host/sub-uri/
) का उपयोग करके उप-यूआरआई में तैनात किया जाता है। इसके साथ समस्या यह है कि संपत्ति तैनाती के दौरान पूर्व-संकलित होती है और मेरी सीएसएस में से एक (अच्छी तरह से, यह .css.scss
फ़ाइल है) फाइलें मणि से image-url
सहायक का उपयोग कर रही हैं। में
body { background-image: image-url("bg.png"); }
परिणाम: चूंकि पूर्व संकलन की प्रक्रिया के दौरान, रास्तों precompiled सीएसएस फ़ाइल में हार्ड-कोडेड कर रहे हैं, सब-uri के कारण नहीं लिया जाता है:
मेरी .css.scss
फ़ाइल में संकलित application-<md5-hash-here>.css
फ़ाइल:
body { background-image: url(/assets/bg.png); }
क्या यह इसे सही ढंग से काम करने के लिए किया जाना चाहिए:
body { background-image: url(/sub-uri/assets/bg.png); }
क्या यह परिदृश्य सिर्फ इतना पूछ रहा है? यदि ऐसा है, तो मुझे पुराने गैर-परिसंपत्ति-पाइपलाइन तरीके पर वापस जाना होगा और केवल public
से मेरी छवियों और सीएसएस की सेवा करनी होगी। हालांकि ऐसा कुछ ऐसा लगता है जिसे सोचा और हल किया जाना चाहिए था ...? क्या मुझे समाधान याद आ रहा है?
संपादित करें 1: मैं नोट करना चाहिए कि erb solution उपयोग करने के बजाय एक ही परिणाम पैदावार, के रूप में एक उम्मीद होती है।
संपादित करें 2: बेनोइट अटारी की टिप्पणी के जवाब में
नहीं है, समस्या config.assets.prefix
से संबंधित नहीं है। मैंने इसे सेट करने की कोशिश की (/sub-uri/assets
/assets
के डिफ़ॉल्ट के बजाय) लेकिन यह पता चला कि यह गलत काम था - ऐसा लगता है कि यह सेटिंग पहले से ही रेल ऐप की जड़ के संबंध में है, सर्वर नहीं। इसे हटाने (और इस प्रकार डिफ़ॉल्ट पर लौटने) ने सभी अजीब मुद्दों को ठीक कर दिया है (और वहां कई थे, सभी संपत्ति /sub-uri/sub-uri/assets
में समाप्त हुई - यह सब बहुत अजीब था)। एकमात्र समस्या यह है कि image-url
सहायक और मित्र उप-यूआरआई नहीं लेते हैं जब वे पूर्व-संकलित होते हैं। कहने की जरूरत नहीं है, यह पहले से संकलित होने के बाद तार्किक है, यह संभवतः यह नहीं जान सका कि जब यात्री के तहत यह चल रहा है, तो इसे इस तरह से कॉन्फ़िगर किया जाएगा। मेरा सवाल यह है कि इसे कैसे सूचित किया जाए और इस प्रकार प्रीकंपिल्ड परिणाम में सही पथों को समाप्त किया जाए। अगर वास्तव में यह किया जा सकता है।
मेरा वर्तमान कामकाज सीएसएस में इस तरह के आईएजी को संदर्भित करना है: url(../images/bg.png)
और इसे गैर-पाइपलाइन public/images
स्थान पर रखें। मुश्किल से आदर्श क्योंकि यह फिंगरप्रिंटिंग और पाइपलाइन प्रदान करता है जो सब कुछ से लाभ नहीं होता है।
क्या आपने इसे आजमाया? http://stackoverflow.com/questions/7295744/how-to-deploy-rails-3-1-app-in-a-subdirectory –
ऐप स्वयं को ठीक से तैनात किया गया है (यह रेलवेबेसरी विधि का उपयोग करता है क्योंकि यह यात्रियों के रूप में है दस्तावेज़ अनुशंसा)। 'Image_tag' का उपयोग कर छवियों जैसे चल रहे एप्लिकेशन के भीतर से जुड़ी सभी संपत्तियां ठीक हैं। सीएसएस के भीतर से संदर्भित छवियों की एकमात्र समस्या है - यह संपत्ति के पूर्व-संकलन के समय उप-यूआरआई के बारे में नहीं जानता है। यह है कि यदि कोई है तो मुझे समाधान की आवश्यकता है। –
तो आपकी समस्या यह है कि 'image-uri' सहायक' config.assets.prefix' नहीं उठाता है? –