5 Stimmen

Nachteil der Bereitstellung von Schriftarten aus /public Verzeichnis in Rails?

Ich liebe die Asset-Pipeline, aber ich kann sie beim besten Willen nicht dazu bringen, meine Schriftarten zu bedienen. Ich habe Stunden damit verschwendet, zu googeln und SO Lösungen auszuprobieren ( nein , nein , nein ).

Stattdessen habe ich /public/fonts alle meine Schriftarten dort abgelegt und sie mit url('/fonts/myAwesomeFont.ttf') . Alles funktioniert perfekt.

Gibt es einen Nachteil bei diesem Ansatz?

Werden Schriftdateien bei der Vorkompilierung von Assets komprimiert?

6voto

jshkol Punkte 1697

Wir bewahren unsere Schriftarten im Ordner /app/assets/fonts auf, und wenn ich mich recht erinnere, mussten wir keine zusätzliche Konfiguration vornehmen.

Sie müssen jedoch die asset_path in Ihren CSS-Dateien, wenn Sie auf die Schriftarten verweisen (genauso wie beim Verweis auf Asset-Pipeline-Bilder in CSS). Dies erfordert eine Änderung der Dateierweiterung von .css à .css.erb . Nach Ihrer Beschreibung ist es schwer zu sagen, aber ich vermute, dass dies das Problem sein könnte.

Beispiel

Wir verwenden die Schriftart Museo500 in unserer Anwendung und speichern sie unter app/assets/fonts:

app/assets/fonts:
  - museo700-regular-webfont.eot
  - museo700-regular-webfont.woff
  - museo700-regular-webfont.ttf
  - museo700-regular-webfont.svg

Die @font-face-Deklaration lautet wie folgt:

@font-face {
    font-family: 'Museo700';
    src: url('<%= asset_path "museo700-regular-webfont.eot" %>');
    src: url('<%= asset_path "museo700-regular-webfont.eot" %>?#iefix') format('embedded-opentype'),
         url('<%= asset_path "museo700-regular-webfont.woff" %>') format('woff'),
         url('<%= asset_path "museo700-regular-webfont.ttf" %>') format('truetype'),
         url('<%= asset_path "museo700-regular-webfont.svg" %>#Museo700') format('svg');
    font-weight: normal;
    font-style: normal;

}

Vorteile der Verwendung der Asset-Pipeline für Binärdateien

Wir machen keine Vorkompilierung für Bild- oder Schriftarten-Assets (ich schätze, man könnte die Schriftarten gzipen oder so, aber wir tun es nicht), aber ich sehe immer noch einen Vorteil darin, sie durch die Asset-Pipeline zu hosten: Einheitlichkeit und Konvention. Mit Rails Konvention kann alle Arten von Vorteilen bieten.

Beispiel: Irgendwann möchten Sie vielleicht ein CDN wie Amazon Cloudfront verwenden und müssen alle Asset-URLs in der Produktion auf die CDN-Kopien verweisen lassen. Wenn Sie alle Ihre Assets, einschließlich Schriften und Bilder, über die Asset-Pipeline hosten, ist diese Änderung so einfach wie das Ändern des asset_host in Ihrer production.rb-Datei, indem Sie die Zeilen auskommentieren:

  # Enable serving of images, stylesheets, and JavaScripts from an asset server
  # config.action_controller.asset_host = "http://assets.example.com"

Wenn Sie Ihre Schriftarten bereits mit der Option asset_path helfen, werden diese URLs automatisch aktualisiert und verweisen auf das CDN. Ich denke, es ist so viel ein Vorteil der Verwendung path_helpers als die Asset-Pipeline selbst, aber so oder so ist es von Vorteil.

Ich hoffe, das hilft!

0voto

Meine Antwort auf die erste Frage lautet: "Ich weiß es nicht.

Schriftdateien sollten nicht von der Rails-Assets-Pipeline komprimiert werden, CSS und JS werden komprimiert und Bilder können mit 3rd-Part-Gems wie ritzel-bild_kompressor .

0voto

aceofspades Punkte 7510

Daran ist überhaupt nichts auszusetzen. Der größte Vorteil der Asset-Pipeline ist, dass Ihr JS und CSS, die Code sind, wie Quellcode organisiert sind. Bei der Bereitstellung wird Ihr Code in einem anderen Format in /public verpackt, das für den öffentlichen Gebrauch geeignet ist.

Jede Komprimierung, die stattfindet, sollte vom Webserver durchgeführt werden.

0voto

Tim Arnold Punkte 8269

Hier ist eine gute Lösung, die ich online gefunden habe:

http://aokolish.me/blog/2011/12/24/at-font-face-with-the-asset-pipeline

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X