Como corrigir o problema de AssetNotPrecompiled no Rails
Olá amigos, alguma vez você já passou por esse erro: Sprockets::Rails::Helper::AssetNotPrecompiled. Hoje vou ensiná-los a como resolvê-lo.
Resposta rápida
Esse erro aconteceu porque você está usando algum asset CSS ou Javascript e não informou ao Rails que ele deve precompilar para você. Para fazer isso basta ir em app/config/initializers/assets.rb e adicionar o novo arquivo utilizado.
# app/config/initializers/assets.rb
Rails.application.config.assets.precompile += %w(
users.css
novo_arquivo.js
// ... outros arquivos
)
E após isso, reiniciar o servidor.
Obs: perceba que o arquivo assets.rb esta dentro da pasta initializers, isso significa que esses arquivos foram carregado na inicialização do servidor e para qualquer alteração, o servido deverá ser reinicializado.
Agora, se você quiser uma explicação mais detalhada, é só continuar lendo este post.
Corrigindo o problema
Se você quiser saber um pouco mais com os assets se comportam no Rails, veja essa publicação: Como migrar um template HTML
Esse erro, sempre acontece quando utilizamos um arquivo CSS ou JS diferente de application.css e application.js e desejamos importá-lo em nossa view.
Como na foto acima, queríamos usar o arquivo de estilo users.css, mas o Rails nos informou um erro. Para corrigir esse erro, basta adicionar 1 linha em assets.rb
# app/config/initializers/assets.rb
Rails.application.config.assets.precompile += %w(
users.css
// ... outros arquivos
)
Após feito, precisaremos reiniciar o server e o erro estará corrigido.
Informações adicionais
O erro já foi corrigido, mas queria passar mais 2 segundos para lhe dizer 2 coisas:
-
Assim como o arquivo assets.rb, a alteração de qualquer outro arquivo dentro de app/config/initializers é necessário a reinicialização do servidor para as alterações serem efetivadas. Sugestão: você pode adicionar códigos para serem executados na inicialização do server, como por exemplo, a definição de variáveis de ambiente, que comumente usamos para salvar tokens de acesso a API’s. (Em breve escreverei uma publicação sobre isso.)
-
Nem todo novo arquivo CSS é necessário ser adicionado em assets.rb. Por exemplo, digamos que dentro do arquivo user.css importado anteriormente tenha o seguinte código
// users.css
/*
* This is a manifest file that'll be compiled into application.css, which will include all the files
* listed below.
*
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, or any plugin's
* vendor/assets/stylesheets directory can be referenced here using a relative path.
*
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
* compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
* files in this directory. Styles in this file should be added after the last require_* statement.
* It is generally better to create a new file per style scope.
*
*= require sb-admin-2
*= require_tree .
*= require_self
*/
o arquivo sb-admin-2.css não necessita ser adicionado, pois o “arquivo pai” já foi adicionado, ou seja, precisamos apenas adicionar o “arquivo pai” ou “arquivo agregador”, feito isso, o Rails é inteligente o suficiente para olhar dentro desse arquivo e ir pré-compilando os imports necessários.
#Fim
Opa, tudo bem? Antes de você ir, te deixo aqui meu email: [email protected]
Teve alguma dúvida?
Você achou que eu escrevi alguma coisa errada? Erro de português?
Você tem uma forma melhor de resolver o problema?
Você tem alguma sugestão de tópico para eu escrever?
Ou se quiser conversar sobre qualquer outro assunto?
Vamos trocar uma ideia. Sinta-se livre para me enviar um email. Eu lhe responderei com o maior prazer!