Eu descobri uma maneira elegante e parecida com o Rails de fazer isso. Primeiro, renomeie seu .scss
arquivo 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 @import
no 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 s
atende 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.css
que não foi pré-compilada e não existe na produção.
Como esta solução funciona:
Primeiramente, movendo o .scss
arquivo 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.erb
arquivo faz duas coisas:
- Dispara a
rake assets:precompile
tarefa 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!