나는 우아한 Rails와 같은 방법을 알아 냈습니다. 먼저 .scss
파일 이름을로 바꾸고 .scss.erb
다음과 같은 구문을 사용하십시오 ( highlight_js-rails4 gem CSS asset의 예 ).
@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 파일을 미리 컴파일 하도록 작업을 트리거 합니다.
- Rails 환경에 관계없이 자산을 적절하게 반영하는 URL을 생성합니다.
이것은 또한 SCSS 엔진이 CSS 파일을 파싱하지도 않는다는 것을 의미합니다. 그것은 단지 그것에 링크를 호스팅하고 있습니다! 따라서 호키 멍키 패치 또는 중대한 해결 방법이 없습니다. 우리는 의도 한대로 SCSS를 통해 CSS 자산을 제공하고 있으며 Rails의 의도대로 CSS 자산의 URL을 사용하고 있습니다. 단!