ฉันค้นพบวิธีที่หรูหราราวกับ Rails ที่จะทำ ก่อนอื่นให้เปลี่ยนชื่อ.scssไฟล์ของคุณเป็น.scss.erbจากนั้นใช้ไวยากรณ์เช่นนี้ (ตัวอย่างสำหรับเนื้อหา CSS อัญมณี highlight_js-rails4 ):
@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 เป็นเทมเพลตสำหรับ Rails อย่างมีประสิทธิภาพ ตอนนี้เมื่อใดก็ตามที่เราใช้<%= ... %>เทมเพลตแท็กตัวประมวลผลเทมเพลต Rails จะแทนที่ตัวอย่างเหล่านี้ด้วยผลลัพธ์ของรหัส (เช่นเดียวกับเทมเพลตอื่น ๆ )
การระบุasset_path("highlight_js/github")ใน.scss.erbไฟล์ทำสองสิ่ง:
- ทริกเกอร์
rake assets:precompileงานเพื่อคอมไพล์ไฟล์ CSS ที่เหมาะสม
- สร้าง URL ที่สะท้อนสินทรัพย์อย่างเหมาะสมโดยไม่คำนึงถึงสภาพแวดล้อมของ Rails
นี่ก็หมายความว่าเอ็นจิน SCSS ไม่ได้แยกไฟล์ CSS ด้วย มันเป็นเพียงการโฮสต์ลิงก์ไปยังมัน! ดังนั้นจึงไม่มีแพทช์ลิง hokey หรือวิธีแก้ปัญหาขั้นต้น เราให้บริการเนื้อหา CSS ผ่าน SCSS ตามที่ตั้งใจไว้และใช้ URL เพื่อบอกเนื้อหา CSS ว่าเป็น Rails ไว้ หวาน!