Eu tenho algumas fontes sendo configuradas no meu arquivo Scss da seguinte forma:
@font-face {
font-family: 'Icomoon';
src: asset-url('icoMoon.eot?#iefix', font) format('embedded-opentype'),
asset-url('icoMoon.woff', font) format('woff'),
asset-url('icoMoon.ttf', font) format('truetype'),
asset-url('icoMoon.svg#Icomoon', font) format('svg');
}
O arquivo de fonte real é armazenado em / app / assets / fonts /
Eu adicionei config.assets.paths << Rails.root.join("app", "assets", "fonts")
ao meu arquivo application.rb
e a fonte CSS de compilação é a seguinte:
@font-face {
font-family: 'Icomoon';
src: url(/assets/icoMoon.eot?#iefix) format("embedded-opentype"), url(/assets/icoMoon.woff) format("woff"), url(/assets/icoMoon.ttf) format("truetype"), url(/assets/icoMoon.svg#Icomoon) format("svg");
}
Mas quando executo o aplicativo, os arquivos de fonte não estão sendo encontrados. Os logs:
Iniciado GET "/assets/icoMoon.ttf" para 127.0.0.1 em 05/06/2012 23:21:17 +0100 ativo servido /icoMoon.ttf - 404 não encontrado (13ms)
Por que o pipeline de ativos não está nivelando os arquivos de fonte em apenas / assets?
Alguma idéia pessoal?
Atenciosamente, Neil
Informação extra:
Ao verificar o console do Rails quanto a caminhos de ativos e o assetprecompile, recebo o seguinte:
1.9.2p320 :001 > y Rails.application.config.assets.precompile
---
- !ruby/object:Proc {}
- !ruby/regexp /(?:\/|\\|\A)application\.(css|js)$/
- .svg
- .eot
- .woff
- .ttf
=> nil
1.9.2p320 :002 > y Rails.application.config.assets.paths
---
- /Users/neiltonge/code/neiltonge/app/assets/fonts
- /Users/neiltonge/code/neiltonge/app/assets/images
- /Users/neiltonge/code/neiltonge/app/assets/javascripts
- /Users/neiltonge/code/neiltonge/app/assets/stylesheets
- /Users/neiltonge/code/neiltonge/vendor/assets/images
- /Users/neiltonge/code/neiltonge/vendor/assets/javascripts
- /Users/neiltonge/code/neiltonge/vendor/assets/stylesheets
- /Users/neiltonge/.rvm/gems/ruby-1.9.2-p320@neiltonge/gems/jquery-rails-2.0.0/vendor/assets/javascripts
- /Users/neiltonge/.rvm/gems/ruby-1.9.2-p320@neiltonge/gems/coffee-rails-3.2.1/lib/assets/javascripts
- /Users/neiltonge/.rvm/gems/ruby-1.9.2-p320@neiltonge/gems/bourbon-1.3.0/app/assets/stylesheets
- !ruby/object:Pathname
path: /Users/neiltonge/code/neiltonge/app/assets/fonts
=> nil
fonte
font-url
auxiliar no SCSS no Rails.Respostas:
Se a sua versão do Rails estiver entre
> 3.1.0
e< 4
, coloque suas fontes em qualquer uma destas pastas:app/assets/fonts
lib/assets/fonts
vendor/assets/fonts
Para versões do Rails
> 4
, você deve colocar suas fontes naapp/assets/fonts
pastaNota: Para colocar fontes fora dessas pastas designadas, use a seguinte configuração:
config.assets.precompile << /\.(?:svg|eot|woff|ttf)\z/
Para versões do Rails
> 4.2
, é recomendável adicionar essa configuração aoconfig/initializers/assets.rb
.No entanto, você também pode adicioná-lo a
config/application.rb
, ou aconfig/production.rb
Declare sua fonte no seu arquivo CSS:
Certifique-se de que sua fonte tenha o nome exatamente igual ao da URL da declaração. Letras maiúsculas e sinais de pontuação são importantes. Nesse caso, a fonte deve ter o nome
icomoon
.Se você estiver usando Sass ou Less with Rails
> 3.1.0
(seu arquivo CSS possui.scss
ou.less
extensão), altere ourl(...)
na declaração da fonte parafont-url(...)
.Caso contrário, seu arquivo CSS deverá ter a extensão
.css.erb
e a declaração da fonteurl('<%= asset_path(...) %>')
.Se você estiver usando o Rails
> 3.2.1
, poderá usarfont_path(...)
vez deasset_path(...)
. Esse ajudante faz exatamente a mesma coisa, mas é mais claro.Por fim, use sua fonte em seu CSS como você a declarou na
font-family
parte. Se foi declarado em maiúscula, você pode usá-lo assim:fonte
config.assets.precompile += %w( .svg .eot .woff .ttf )
está realmente errado, você precisa adicionar para pré-compilar algo que corresponda ao nome completo do ativo. A regexp trabalhou para mim:config.assets.precompile << /\.(?:svg|eot|woff|ttf)$/
config.assets.paths
é para referências de Sprockets, não relevantes aqui.config.assets.precompile
também é inútil porque "O correspondente padrão para compilar arquivos inclui application.js, application.css e todos os arquivos não JS / CSS (isso incluirá todos os ativos de imagem automaticamente) das pastas de aplicativos / ativos" (veja aqui )Agora, aqui está uma torção:
- @plapier, thinkbot / bourbon
- @jhilden, thinkbot / bourbon
Eu também testei
rails 4.0.0
. Na verdade, a última linha é suficiente para pré-compilar com segurança as fontes davendor
pasta. Demorou algumas horas para descobrir. Espero que tenha ajudado alguém.fonte
app.config.assets.paths << Rails.root.join('vendor', 'assets', 'fonts')
app.config.assets.precompile << /\.(?:svg|eot|woff|ttf)$/
Um comentário em outra resposta diz que a última cuida de ambas.app/assets
entradas para rodas dentadas e amigos são processadas como saídapublic/assets
, emboravendor/assets
ainda possa ser útil para implantar ativos sem modificação; ambos têm seus casos de uso. Toda a convenção de vendas tem como premissa a garantia de que nada acontecerávendor/*
. (Sim,vendor/plugins
foi abusado com código-hoarding, closed-fonte mania pré gem era e as pessoas simplesmente copiar-colar js sem versão emvendor/assets/javascripts
pré-Bower / rails-ativos.)config/initializers/assets.rb
Se você não deseja acompanhar o movimento de suas fontes:
fonte
config.assets.precompile << /\.(?:svg|eot|woff|ttf)$/
Você precisa usar
font-url
no seu bloco @ font-face, nãourl
bem como esta linha em application.rb, como você mencionou (para fontes em
app/assets/fonts
fonte
src: url(someFont.ttf)
esrc: font-url(someFont.ttf)
trabalhou ao ter os arquivos emapp/assets/fonts
. Eu tenho.scss
extensões por padrão. Não precisei adicionar o config.assets.paths.Aqui, minha abordagem ao uso de fontes no pipeline de ativos:
1) Coloque todo o seu arquivo de fonte
app/assets/fonts/
, na verdade você não está restrito a colocá-lo nofonts
nome da pasta. Você pode colocar qualquer nome de subpasta que desejar. Por exemplo,app/assets/abc
ouapp/assets/anotherfonts
. Mas eu recomendo que você o coloqueapp/assets/fonts/
para melhor estrutura de pastas.2) No seu arquivo sass, use o auxiliar sass
font-path
para solicitar seus recursos de fonte como este3) Execute a
bundle exec rake assets:precompile
partir da sua máquina local e veja o resultado do seu application.css. Você deve ver algo assim:Se você quiser saber mais sobre como o pipeline de ativos funciona, visite o seguinte guia simples: https://designcode.commandrun.com/rails-asset-pipeline-simple-guide-830e2e666f6c#.6lejlayk2
fonte
Eu estava tendo esse problema no Rails 4.2 (com ruby 2.2.3) e tive que editar o _paths.scss parcial da font-awesome para remover referências
$fa-font-path
e remover uma barra principal. O seguinte foi quebrado:E o seguinte funciona:
Uma alternativa seria simplesmente remover a barra seguinte ao interpolado
$fa-font-path
e depois definir$fa-font-path
como uma string ou subdiretório vazio com barra à direita (conforme necessário).Lembre-se de recompilar ativos e reiniciar o servidor conforme necessário. Por exemplo, em uma configuração de passageiro:
Em seguida, recarregue seu navegador.
fonte
Estou usando o Rails 4.2 e não foi possível exibir os ícones de rodapé. Pequenas caixas estavam aparecendo, em vez do (+) nas linhas recolhidas e das pequenas flechas de classificação que eu esperava. Depois de estudar as informações aqui, fiz uma alteração simples no meu código: remova o diretório da fonte em css. Ou seja, altere todas as entradas css assim:
para ficar assim:
Funcionou. Eu acho que o Rails 4.2 já assume o diretório da fonte, portanto, especificá-lo novamente no código css faz com que os arquivos da fonte não sejam encontrados. Espero que isto ajude.
fonte
Eu tive um problema semelhante ao atualizar meu aplicativo Rails 3 para o Rails 4 recentemente. Minhas fontes não estavam funcionando corretamente, como no Rails 4+, nós apenas podemos manter as fontes no
app/assets/fonts
diretório. Mas meu aplicativo Rails 3 tinha uma organização de fonte diferente. Então eu tive que configurar o aplicativo para que ele ainda funcione com o Rails 4+ com minhas fontes em um local diferenteapp/assets/fonts
. Eu tentei várias soluções, mas depois que encontrei a gema de ativos de digestão não estúpida , ela ficou muito fácil.Adicione esta gema adicionando a seguinte linha ao seu Gemfile:
Então corra:
E, finalmente, adicione a seguinte linha no seu arquivo config / initializers / non_digest_assets.rb :
É isso aí. Isso resolveu meu problema muito bem. Espero que isso ajude alguém que encontrou um problema semelhante ao meu.
fonte
Aqui está um repositório que demonstra servindo uma fonte personalizada com o Rails 5.2 que funciona no Heroku. Ele vai além e otimiza o fornecimento das fontes para que seja o mais rápido possível, de acordo com https://www.webpagetest.org/
https://github.com/nzoschke/edgecors
Para começar, peguei peças das respostas acima. Para o Rails 5.2 ou superior, você não precisa de uma configuração extra de pipeline de ativos.
Pipeline de ativos e SCSS
app/assets/fonts
@font-face
declaração em um arquivo scss e use ofont-url
auxiliarDe
app/assets/stylesheets/welcome.scss
:Servir de CDN com CORS
Estou usando o CloudFront, adicionado com o complemento Heroku Edge .
Primeiro, configure um prefixo CDN e
Cache-Control
cabeçalhos padrão emproduction.rb
:Se você tentar acessar a fonte do URL herokuapp.com para o URL da CDN, receberá um erro CORS no seu navegador:
Portanto, configure o CORS para permitir o acesso à fonte do Heroku na URL da CDN:
Ativar recurso de fonte gzip
O pipeline de ativos cria um
.ttf.gz
arquivo, mas não o serve. Esse patch de macaco altera a lista de permissões gzip do pipeline de ativos para uma lista negra:O resultado final é um arquivo de fonte personalizado
app/assets/fonts
servido em um cache do CloudFront de longa duração.fonte
No meu caso, a pergunta original estava usando
asset-url
sem resultados, em vez deurl
propriedade css simples . Usandoasset-url
acabou trabalhando para mim em Heroku. Além disso, defina as fontes na/assets/fonts
pasta e faça a chamadaasset-url('font.eot')
sem adicionar nenhuma subpasta ou qualquer outra configuração a ela.fonte
Se você tiver um arquivo chamado scaffolds.css.scss, existe a chance de substituir todas as coisas personalizadas que você está fazendo nos outros arquivos. Comentei esse arquivo e de repente tudo funcionou. Se não houver nada importante nesse arquivo, você também pode excluí-lo!
fonte
basta colocar suas fontes na pasta app / assets / fonts e definir o caminho de carregamento automático quando o aplicativo começar a escrever o código em application.rb
config.assets.paths << Rails.root.join ("app", "assets", "fonts") e
em seguida, use o seguinte código em css.
@Tipo de letra {
}
De uma chance.
obrigado
fonte