ruby on rails - learn - Usando fuentes con el canal de activos de Rails
ruby on rails tutorial pdf (11)
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 / asset / 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 fuentes. Los registros:
Comenzó a obtener "/assets/icoMoon.ttf" para 127.0.0.1 a 2012-06-05 23:21:17 +0100 activo servido /icoMoon.ttf - 404 No encontrado (13ms)
¿Por qué la canalización de activos no está aplanando los archivos de fuentes en solo / los activos?
¿Alguna idea de la gente?
Saludos cordiales, Neil
Información extra:
Cuando se comprueban en la consola de los rieles las rutas de recursos 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
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
, debe colocar sus fuentes en la carpetaapp/assets/fonts
.Nota: para colocar las fuentes fuera de estas carpetas designadas, use la siguiente configuración:
config.assets.precompile << //.(?:svg|eot|woff|ttf)/z/
Para versiones de Rails
> 4.2
, se recomienda agregar esta configuración aconfig/initializers/assets.rb
.Sin embargo, también puede agregarlo a
config/application.rb
o aconfig/production.rb
-
Declara tu fuente en tu archivo CSS:
@font-face { font-family: ''Icomoon''; src:url(''icomoon.eot''); src:url(''icomoon.eot?#iefix'') format(''embedded-opentype''), url(''icomoon.svg#icomoon'') format(''svg''), url(''icomoon.woff'') format(''woff''), url(''icomoon.ttf'') format(''truetype''); font-weight: normal; font-style: normal; }
Asegúrese de que su fuente tenga el mismo nombre que en la porción de URL de la declaración. Las mayúsculas y los signos de puntuación importan. En este caso, la fuente debe tener el nombre
icomoon
.Si está utilizando Sass o Less with Rails
> 3.1.0
(su archivo CSS tiene extensión.scss
o.less
), cambie laurl(...)
en la declaración de lafont-url(...)
afont-url(...)
.De lo contrario, su archivo CSS debería tener la extensión
.css.erb
, y la declaración de la fuente debería serurl(''<%= asset_path(...) %>'')
.Si está utilizando Rails
> 3.2.1
, puede usarfont_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 parte de la
font-family
. Si fue declarado en mayúscula, puedes usarlo así:font-family: ''Icomoon'';
Ahora aquí hay un giro:
Debería colocar todas las fuentes en
app/assets/fonts/
ya que se precompilarán de forma predeterminada en la preparación y producción; se precompilarán cuando se envíen a Heroku .Los archivos de fuentes colocados en el
vendor/assets
NO se precompilarán en la preparación o producción de forma predeterminada, fallarán en heroku . Source!
- @plapier, thoughtbot / bourbon
Creo firmemente que poner fuentes de proveedores en
vendor/assets/fonts
tiene mucho más sentido que ponerlas enapp/assets/fonts
. Con estas 2 líneas de configuración adicional, esto me ha funcionado bien (en Rails 4):
app.config.assets.paths << Rails.root.join(''vendor'', ''assets'', ''fonts'')
app.config.assets.precompile << //.(?:svg|eot|woff|ttf)$/
- @jhilden, thoughtbot / bourbon
También lo he probado en rails 4.0.0
. En realidad, la última línea es suficiente para precompilar con seguridad las fuentes de la carpeta del vendor
. Tomó un par de horas para averiguarlo. Espero que haya ayudado a alguien.
Aquí mi enfoque para usar fuentes en la tubería de activos:
1) Ponga todo su archivo de fuentes en app/assets/fonts/
, en realidad no está restringido para ponerlo bajo el nombre de la carpeta de fonts
. Puede poner cualquier nombre de subcarpeta que desee. Por ejemplo, app/assets/abc
app/assets/anotherfonts
app/assets/abc
o app/assets/anotherfonts
. Pero te recomiendo que lo pongas en app/assets/fonts/
para una mejor estructura de carpetas.
2) Desde su archivo sass, use la font-path
ayuda de sass para solicitar sus fuentes de fuentes como esta
@font-face {
font-family: ''FontAwesome'';
src: url(font-path(''fontawesome-webfont.eot'') + ''?v=4.4.0'');
src: url(font-path(''fontawesome-webfont.eot'') + ''?#iefix&v=4.4.0'') format(''embedded-opentype''),
url(font-path(''fontawesome-webfont.woff2'') + ''?v=4.4.0'') format(''woff2''),
url(font-path(''fontawesome-webfont.woff'') + ''?v=4.4.0'') format(''woff''),
url(font-path(''fontawesome-webfont.ttf'') + ''?v=4.4.0'') format(''truetype''),
url(font-path(''fontawesome-webfont.svg'') + ''?v=4.4.0#fontawesomeregular'') format(''svg'');
font-weight: normal;
font-style: normal;
}
3) Ejecute los bundle exec rake assets:precompile
desde su máquina local y vea el resultado de su application.css. Debería ver algo como esto:
@font-face {
font-family: ''FontAwesome'';
src: url("/assets/fontawesome-webfont-d4f5a99224154f2a808e42a441ddc9248ffe78b7a4083684ce159270b30b912a.eot" "?v=4.4.0");
src: url("/assets/fontawesome-webfont-d4f5a99224154f2a808e42a441ddc9248ffe78b7a4083684ce159270b30b912a.eot" "?#iefix&v=4.4.0") format("embedded-opentype"), url("/assets/fontawesome-webfont-3c4a1bb7ce3234407184f0d80cc4dec075e4ad616b44dcc5778e1cfb1bc24019.woff2" "?v=4.4.0") format("woff2"), url("/assets/fontawesome-webfont-a7c7e4930090e038a280fd61d88f0dc03dad4aeaedbd8c9be3dd9aa4c3b6f8d1.woff" "?v=4.4.0") format("woff"), url("/assets/fontawesome-webfont-1b7f3de49d68b01f415574ebb82e6110a1d09cda2071ad8451bdb5124131a292.ttf" "?v=4.4.0") format("truetype"), url("/assets/fontawesome-webfont-7414288c272f6cc10304aa18e89bf24fb30f40afd644623f425c2c3d71fbe06a.svg" "?v=4.4.0#fontawesomeregular") format("svg");
font-weight: normal;
font-style: normal;
}
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
En mi caso, la pregunta original era utilizar asset-url
sin resultados en lugar de la propiedad simple css de url
. El uso de asset-url
terminó trabajando para mí en Heroku. Además, configure las fuentes en la carpeta /assets/fonts
asset-url(''font.eot'')
/assets/fonts
y llame a asset-url(''font.eot'')
sin agregarle ninguna subcarpeta ni ninguna otra configuración.
Estoy usando Rails 4.2 y no pude mostrar los íconos de pies. Se mostraban pequeñas cajas, en lugar de (+) en las filas contraídas y las pequeñas flechas de clasificación que esperaba. Después de estudiar la información aquí, hice un simple cambio en mi código: eliminar el directorio de fuentes en css. Es decir, cambia todas las entradas de css así:
src:url(''fonts/footable.eot'');
para parecerse a esto:
src:url(''footable.eot'');
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.
Necesitas usar font-url
en tu @ font-face block, no url
@font-face {
font-family: ''Inconsolata'';
src:font-url(''Inconsolata-Regular.ttf'') format(''truetype'');
font-weight: normal;
font-style: normal;
}
así como esta línea en application.rb, como mencionó (para las fuentes en app/assets/fonts
config.assets.paths << Rails.root.join("app", "assets", "fonts")
Si no desea realizar un seguimiento de cómo mover sus fuentes:
# Adding Webfonts to the Asset Pipeline
config.assets.precompile << Proc.new { |path|
if path =~ //.(eot|svg|ttf|woff)/z/
true
end
}
Si tiene un archivo llamado scaffolds.css.scss, entonces existe la posibilidad de que esté anulando 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 puede borrarlo!
Tenía este problema en Rails 4.2 (con ruby 2.2.3) y tuve que editar el tipo de ruta _paths.scss parcial para eliminar las referencias a $fa-font-path
y eliminar una barra diagonal hacia delante. Lo siguiente fue roto:
@font-face {
font-family: ''FontAwesome'';
src: font-url(''#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'');
src: font-url(''#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}'') format(''embedded-opentype''),
font-url(''#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}'') format(''woff2''),
font-url(''#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}'') format(''woff''),
font-url(''#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}'') format(''truetype''),
font-url(''#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular'') format(''svg'');
font-weight: normal;
font-style: normal;
}
Y los siguientes trabajos:
@font-face {
font-family: ''FontAwesome'';
src: font-url(''fontawesome-webfont.eot?v=#{$fa-version}'');
src: font-url(''fontawesome-webfont.eot?#iefix&v=#{$fa-version}'') format(''embedded-opentype''),
font-url(''fontawesome-webfont.woff2?v=#{$fa-version}'') format(''woff2''),
font-url(''fontawesome-webfont.woff?v=#{$fa-version}'') format(''woff''),
font-url(''fontawesome-webfont.ttf?v=#{$fa-version}'') format(''truetype''),
font-url(''fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular'') format(''svg'');
font-weight: normal;
font-style: normal;
}
Una alternativa sería simplemente eliminar la barra diagonal hacia adelante siguiendo la $fa-font-path
$fa-font-path
interpolada y luego definir $fa-font-path
como una cadena o subdirectorio vacío con una barra diagonal hacia atrás (según sea necesario).
Recuerde volver a compilar los activos y reiniciar su servidor según sea necesario. Por ejemplo, en una configuración de pasajeros:
prompt> rake assets:clean; rake assets:clobber
prompt> RAILS_ENV=production RAILS_GROUPS=assets rake assets:precompile
prompt> service passenger restart
A continuación, vuelva a cargar su navegador.
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 directorio app/assets/fonts
. Pero mi aplicación Rails 3 tenía una organización de fuentes diferente. Así que tuve que configurar la aplicación para que aún funcione con Rails 4+ que tiene mis fuentes en un lugar diferente al de app/assets/fonts
. He intentado varias soluciones, pero después de que encontré la gema de non-stupid-digest-assets , la hice tan fácil.
Agregue esta gema agregando la siguiente línea a su Gemfile:
gem ''non-stupid-digest-assets''
Entonces corre:
bundle install
Y finalmente agregue la siguiente línea en su archivo config / initializers / non_digest_assets.rb :
NonStupidDigestAssets.whitelist = [ //.(?:svg|eot|woff|ttf)$/ ]
Eso es. Esto solucionó mi problema muy bien. Espero que esto ayude a alguien que haya encontrado un problema similar como yo.
simplemente coloque sus fuentes dentro de la carpeta app / asset / 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 ("app", "asset", "fonts") y
luego use el siguiente código en css.
@Perfil delantero {
font-family: ''icomoon'';
src: asset-url(''icomoon.eot'');
src: asset-url(''icomoon.eot'') format(''embedded-opentype''),
asset-url(''icomoon.woff'') format(''woff''),
asset-url(''icomoon.ttf'') format(''truetype''),
asset-url(''icomoon.svg'') format(''svg'');
font-weight: normal;
font-style: normal;
}
Darle una oportunidad.
Gracias