मैंने इसे करने के लिए एक सुंदर, रेल जैसी तरह का पता लगाया। सबसे पहले, अपनी .scssफ़ाइल का नाम बदलें .scss.erb, फिर इस तरह सिंटैक्स का उपयोग करें (उदाहरण के लिए highlight_js-rails4 gem CSS संपत्ति ):
@import "<%= asset_path("highlight_js/github") %>";
आप SCSS के माध्यम से फ़ाइल को सीधे होस्ट क्यों नहीं कर सकते :
@importजब तक आप स्पष्ट रूप से पूर्ण पथ एक या दूसरे तरीके का उपयोग करते हैं, तब तक SCSS में करना CSS फाइलों के लिए ठीक काम करता है। विकास मोड में, rails sउन्हें संकलित किए बिना संपत्ति परोसता है, इसलिए इस तरह से एक मार्ग काम करता है ...
@import "highlight_js/github.css";
... क्योंकि होस्ट किया गया पथ वस्तुतः है /assets/highlight_js/github.css। यदि आप पृष्ठ और "स्रोत देखें" पर राइट-क्लिक करते हैं, तो ऊपर के साथ स्टाइलशीट के लिंक पर क्लिक करें @import, आपको वहां एक पंक्ति दिखाई देगी जो इस तरह दिखती है:
@import url(highlight_js/github.css);
SCSS इंजन अनुवाद "highlight_js/github.css"करता है url(highlight_js/github.css)। यह तब तक काम करेगा जब तक कि आप इसे उत्पादन में चलाने का प्रयास करने का निर्णय नहीं लेते हैं, जहां संपत्तियां पहले से हैं, उन्हें फ़ाइल नाम में एक हैश इंजेक्ट किया गया है। SCSS फ़ाइल अभी भी /assets/highlight_js/github.cssउस स्थैतिक को हल करेगी जो कि पूर्व-निर्मित नहीं था और उत्पादन में मौजूद नहीं है।
यह समाधान कैसे काम करता है:
सबसे पहले, .scssफ़ाइल को स्थानांतरित करके .scss.erb, हमने प्रभावी रूप से SCSS को रेल के लिए एक टेम्पलेट में बदल दिया है। अब, जब भी हम <%= ... %>टेम्प्लेट टैग का उपयोग करते हैं, रेल टेम्पलेट प्रोसेसर इन स्निपेट्स को कोड के आउटपुट (किसी अन्य टेम्पलेट की तरह) के साथ बदल देगा।
फाइल asset_path("highlight_js/github")में स्टैटिंग .scss.erbदो काम करती है:
rake assets:precompileउचित सीएसएस फ़ाइल को प्राथमिकता देने के लिए कार्य को ट्रिगर करता है ।
- एक ऐसा URL बनाता है जो उचित रूप से रेल के वातावरण की परवाह किए बिना संपत्ति को दर्शाता है।
इसका मतलब यह भी है कि SCSS इंजन CSS फ़ाइल को पार्स नहीं कर रहा है; यह सिर्फ एक लिंक की मेजबानी कर रहा है! तो कोई hokey बंदर पैच या सकल workarounds है। हम SCSS के माध्यम से एक सीएसएस संपत्ति की सेवा कर रहे हैं, और एक यूआरएल का उपयोग करके सीएसएस संपत्ति को रेल के रूप में कहा है। मिठाई!