Eu descobri uma maneira elegante e parecida com o Rails de fazer isso. Primeiro, renomeie seu .scssarquivo para .scss.erb, em seguida, use sintaxe como esta (exemplo para o recurso CSS de destaque_js-rails4 gem ):
@import "<%= asset_path("highlight_js/github") %>";
Por que você não pode hospedar o arquivo diretamente via SCSS :
Fazer um @importno SCSS funciona bem para arquivos CSS, desde que você use explicitamente o caminho completo de uma maneira ou de outra. No modo de desenvolvimento, rails satende ativos sem compilá-los, portanto, um caminho como esse funciona ...
@import "highlight_js/github.css";
... porque o caminho hospedado é literalmente /assets/highlight_js/github.css. Se você clicar com o botão direito do mouse na página e "visualizar código-fonte" e clicar no link da folha de estilo com as opções acima @import, verá uma linha que se parece com:
@import url(highlight_js/github.css);
O mecanismo SCSS é convertido "highlight_js/github.css"em url(highlight_js/github.css). Isso funcionará muito bem até você decidir executá-lo na produção em que os ativos são pré-compilados com um hash injetado no nome do arquivo. O arquivo SCSS ainda resolverá uma estática /assets/highlight_js/github.cssque não foi pré-compilada e não existe na produção.
Como esta solução funciona:
Primeiramente, movendo o .scssarquivo para .scss.erb, transformamos efetivamente o SCSS em um modelo para o Rails. Agora, sempre que usamos<%= ... %> tags de modelo, o processador de modelo do Rails substituirá esses trechos pela saída do código (como qualquer outro modelo).
A indicação asset_path("highlight_js/github")no .scss.erbarquivo faz duas coisas:
- Dispara a
rake assets:precompiletarefa para pré-compilar o arquivo CSS apropriado.
- Gera uma URL que reflete adequadamente o ativo, independentemente do ambiente do Rails.
Isso também significa que o mecanismo SCSS nem está analisando o arquivo CSS; está apenas hospedando um link para ele! Portanto, não há patches de macaco hokey ou soluções grosseiras. Estamos servindo um recurso CSS via SCSS, conforme pretendido, e usando um URL para o referido recurso CSS conforme o Rails. Doce!