Tengo algunas fuentes configuradas en mi archivo Scss así:
@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');
}
El archivo de fuente real se almacena en / app / assets / fonts /
He agregado config.assets.paths << Rails.root.join("app", "assets", "fonts")
a mi archivo application.rb
y la fuente de compilación CSS es la siguiente:
@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");
}
Pero cuando ejecuto la aplicación, no se encuentran los archivos de fuente. Los registros:
Comenzó GET "/assets/icoMoon.ttf" para 127.0.0.1 en 2012-06-05 23:21:17 +0100 Activo servido /icoMoon.ttf - 404 no encontrado (13 ms)
¿Por qué la canalización de activos no aplana los archivos de fuentes en solo / assets?
¿Alguna idea de personas?
Saludos cordiales, Neil
Información extra:
Al verificar la consola de rails para las rutas de los activos y la compilación de activos, obtengo lo siguiente:
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
fuente
font-url
ayudante en SCSS en Rails.Respuestas:
Si su versión de Rails está entre
> 3.1.0
y< 4
, coloque sus fuentes en cualquiera de estas carpetas:app/assets/fonts
lib/assets/fonts
vendor/assets/fonts
Para las versiones de Rails
> 4
, usted debe colocar sus fuentes en laapp/assets/fonts
carpeta.Nota: Para colocar fuentes fuera de estas carpetas designadas, use la siguiente configuración:
config.assets.precompile << /\.(?:svg|eot|woff|ttf)\z/
Para las versiones de Rails
> 4.2
, se recomienda agregar esta configuración aconfig/initializers/assets.rb
.Sin embargo, también puede agregarlo a cualquiera
config/application.rb
oconfig/production.rb
Declara tu fuente en tu archivo CSS:
Asegúrese de que su fuente tenga el mismo nombre que en la parte de URL de la declaración. Las letras mayúsculas y los signos de puntuación son importantes. En este caso, la fuente debe tener el nombre
icomoon
.Si está utilizando Sass o Less con Rails
> 3.1.0
(su archivo CSS tiene.scss
o.less
extensión), cambie elurl(...)
en la declaración de fuente afont-url(...)
.De lo contrario, su archivo CSS debería tener la extensión
.css.erb
y la declaración de fuente debería serurl('<%= asset_path(...) %>')
.Si está utilizando Rails
> 3.2.1
, puede usar enfont_path(...)
lugar deasset_path(...)
. Este ayudante hace exactamente lo mismo pero es más claro.Finalmente, use su fuente en su CSS como lo declaró en la
font-family
parte. Si se declaró en mayúscula, puede usarlo así:fuente
config.assets.precompile += %w( .svg .eot .woff .ttf )
está realmente mal, debe agregar para precompilar algo que coincida con el nombre completo del activo. Una expresión regular funcionó para mí:config.assets.precompile << /\.(?:svg|eot|woff|ttf)$/
config.assets.paths
es para referencias de Sprockets, no relevante aquí.config.assets.precompile
también es inútil porque "El comparador predeterminado para compilar archivos incluye application.js, application.css y todos los archivos que no sean JS / CSS (esto incluirá todos los activos de imagen automáticamente) de las carpetas de aplicaciones / activos" (ver aquí )Ahora aquí hay un giro:
- @plapier, thoughtbot / bourbon
- @jhilden, thoughtbot / bourbon
También lo he probado
rails 4.0.0
. En realidad, la última línea es suficiente para precompilar de forma segura las fuentes de lavendor
carpeta. Tomó un par de horas para resolverlo. Espero que haya ayudado a alguien.fuente
app.config.assets.paths << Rails.root.join('vendor', 'assets', 'fonts')
app.config.assets.precompile << /\.(?:svg|eot|woff|ttf)$/
Un comentario sobre otra respuesta dice que esta última se encarga de ambas.app/assets
entrada a los piñones y amigos procesados como salidapublic/assets
, mientrasvendor/assets
que todavía puede ser útil para desplegar activos sin modificación; ambos tienen sus casos de uso. Toda la convención de venta se basa en la garantía de que no sucederá nadavendor/*
. (Sí,vendor/plugins
fue abusado con el acaparamiento de códigos, la era pre-manía de código cerrado y la gente simplemente copió y pegó js no versionados envendor/assets/javascripts
pre-Bower / carriles-activos.)config/initializers/assets.rb
Si no desea realizar un seguimiento del movimiento de sus fuentes:
fuente
config.assets.precompile << /\.(?:svg|eot|woff|ttf)$/
Debe usar
font-url
en su bloque @ font-face, nourl
así como esta línea en application.rb, como mencionaste (para fuentes en
app/assets/fonts
fuente
src: url(someFont.ttf)
ysrc: font-url(someFont.ttf)
trabajado al tener los archivos enapp/assets/fonts
. Tengo.scss
extensiones por defecto. No necesitaba agregar a config.assets.paths.Aquí mi enfoque para usar fuentes en la cartera de activos:
1) Ponga todo su archivo de fuente debajo
app/assets/fonts/
, en realidad no está restringido a ponerlo bajo elfonts
nombre de la carpeta. Puede poner cualquier nombre de subcarpeta que desee. Por ejemploapp/assets/abc
oapp/assets/anotherfonts
. Pero le recomiendo que lo pongaapp/assets/fonts/
para una mejor estructura de carpetas.2) Desde su archivo sass, usando el ayudante sass
font-path
para solicitar sus recursos de fuente como este3) Ejecute
bundle exec rake assets:precompile
desde su máquina local y vea el resultado de su application.css. Debería ver algo como esto:Si desea saber más sobre cómo funciona la canalización de activos, puede visitar la siguiente guía simple: https://designcode.commandrun.com/rails-asset-pipeline-simple-guide-830e2e666f6c#.6lejlayk2
fuente
Estaba teniendo este problema en Rails 4.2 (con ruby 2.2.3) y tuve que editar el font-awesome _paths.scss parcial para eliminar referencias
$fa-font-path
y eliminar una barra diagonal delantera. Lo siguiente estaba roto:Y lo siguiente funciona:
Una alternativa sería simplemente eliminar la barra diagonal después de la interpolada
$fa-font-path
y luego definir$fa-font-path
como una cadena vacía o subdirectorio con la barra diagonal posterior (según sea necesario).Recuerde volver a compilar activos y reiniciar su servidor según sea necesario. Por ejemplo, en una configuración de pasajero:
Luego vuelva a cargar su navegador.
fuente
Estoy usando Rails 4.2, y no pude mostrar los íconos de footable. Se mostraban pequeñas cajas, en lugar del (+) en las filas colapsadas y las pequeñas flechas de clasificación que esperaba. Después de estudiar la información aquí, hice un cambio simple en mi código: eliminar el directorio de fuentes en css. Es decir, cambie todas las entradas de CSS como esta:
para lucir así:
Funcionó. Creo que Rails 4.2 ya asume el directorio de fuentes, por lo que especificarlo nuevamente en el código CSS hace que no se encuentren los archivos de fuentes. Espero que esto ayude.
fuente
Tuve un problema similar cuando actualicé mi aplicación Rails 3 a Rails 4 recientemente. Mis fuentes no funcionaban correctamente como en Rails 4+, solo se nos permite mantener las fuentes en el
app/assets/fonts
directorio. Pero mi aplicación Rails 3 tenía una organización de fuentes diferente. Así que tuve que configurar la aplicación para que todavía funcione con Rails 4+ teniendo mis fuentes en un lugar diferente que no seaapp/assets/fonts
. He intentado varias soluciones, pero después de encontrar una gema no estúpida de digest-assets , me lo hizo muy fácil.Agregue esta gema agregando la siguiente línea a su Gemfile:
Entonces corre:
Y finalmente agregue la siguiente línea en su archivo config / initializers / non_digest_assets.rb :
Eso es. Esto resolvió mi problema muy bien. Espero que esto ayude a alguien que ha encontrado un problema similar como yo.
fuente
Aquí hay un repositorio que muestra una fuente personalizada con Rails 5.2 que funciona en Heroku. Va más allá y optimiza el servicio de las fuentes para que sea lo más rápido posible de acuerdo con https://www.webpagetest.org/
https://github.com/nzoschke/edgecors
Para comenzar, elegí piezas de las respuestas anteriores. Para Rails 5.2+ no debería necesitar una configuración de canalización de activos adicional.
Tubería de activos y SCSS
app/assets/fonts
@font-face
declaración en un archivo scss y use elfont-url
ayudanteDe
app/assets/stylesheets/welcome.scss
:Servir desde CDN con CORS
Estoy usando CloudFront, agregado con el complemento Heroku Edge .
Primero configure un prefijo CDN y
Cache-Control
encabezados predeterminados enproduction.rb
:Si intenta acceder a la fuente desde la URL herokuapp.com a la URL de CDN, recibirá un error CORS en su navegador:
Configure CORS para permitir el acceso a la fuente de Heroku a la URL de CDN:
Servir gzip Font Asset
La canalización de activos crea un
.ttf.gz
archivo pero no lo sirve. Este parche de mono cambia la lista blanca de gzip de la canalización de activos a una lista negra:El resultado final es un archivo de fuente personalizado
app/assets/fonts
servido desde un caché de CloudFront de larga duración.fuente
En mi caso, la pregunta original se usaba
asset-url
sin resultados en lugar de laurl
propiedad CSS simple . El usoasset-url
terminó trabajando para mí en Heroku. Además, configura las fuentes en la/assets/fonts
carpeta y llamaasset-url('font.eot')
sin agregar ninguna subcarpeta ni ninguna otra configuración.fuente
Si tiene un archivo llamado scaffolds.css.scss, existe la posibilidad de que anule todas las cosas personalizadas que está haciendo en los otros archivos. Comenté ese archivo y de repente todo funcionó. Si no hay nada importante en ese archivo, ¡también podrías eliminarlo!
fuente
simplemente coloque sus fuentes dentro de la carpeta app / assets / fonts y configure la ruta de carga automática cuando la aplicación comience a escribir el código en application.rb
config.assets.paths << Rails.root.join ("aplicación", "activos", "fuentes") y
luego use el siguiente código en css.
@Perfil delantero {
}
Darle una oportunidad.
Gracias
fuente