Mam kilka czcionek konfigurowanych w moim pliku Scss, takich jak:
@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');
}
Rzeczywisty plik czcionek jest przechowywany w / app / asset / fonts /
Dodałem config.assets.paths << Rails.root.join("app", "assets", "fonts")
do mojego pliku application.rb
a skompilowane źródło CSS wygląda następująco:
@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");
}
Ale kiedy uruchamiam aplikację, nie można znaleźć plików czcionek. Dzienniki:
Rozpoczęto GET „/assets/icoMoon.ttf” dla 127.0.0.1 na 06.06.2012 23:21:17 +0100 Obsługiwany zasób /icoMoon.ttf - 404 nie znaleziono (13ms)
Dlaczego potok zasobów nie spłaszcza plików czcionek do samych / zasobów?
Jakieś pomysły ludzie?
Z pozdrowieniami, Neil
Informacje dodatkowe:
Podczas sprawdzania konsoli szyn pod kątem ścieżek zasobów i zasobów prekompilacji otrzymuję:
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
ruby-on-rails
sass
asset-pipeline
font-face
assets
rctneil
źródło
źródło
font-url
pomocnika w SCSS w Railsach.Odpowiedzi:
Jeśli twoja wersja Railsów znajduje się pomiędzy
> 3.1.0
i< 4
, umieść czcionki w jednym z tych folderów:app/assets/fonts
lib/assets/fonts
vendor/assets/fonts
Dla wersji Rails
> 4
, to należy umieścić czcionki wapp/assets/fonts
folderze.Uwaga: Aby umieścić czcionki poza tymi wyznaczonymi folderami, użyj następującej konfiguracji:
config.assets.precompile << /\.(?:svg|eot|woff|ttf)\z/
Dla wersji Rails
> 4.2
, jest zalecane , aby dodać tę konfiguracjęconfig/initializers/assets.rb
.Możesz jednak również dodać go do albo
config/application.rb
, albo doconfig/production.rb
Zadeklaruj czcionkę w pliku CSS:
Upewnij się, że twoja czcionka ma dokładnie taką samą nazwę jak w części adresu URL deklaracji. Duże litery i znaki interpunkcyjne mają znaczenie. W takim przypadku czcionka powinna mieć nazwę
icomoon
.Jeśli używasz Sass lub Less z Railsami
> 3.1.0
(plik CSS ma.scss
lub.less
rozszerzenie), zmieńurl(...)
deklarację czcionki nafont-url(...)
.W przeciwnym razie plik CSS powinien mieć rozszerzenie
.css.erb
, a deklaracja czcionki powinna miećurl('<%= asset_path(...) %>')
.Jeśli używasz Railsów
> 3.2.1
, możesz użyćfont_path(...)
zamiastasset_path(...)
. Ten pomocnik robi dokładnie to samo, ale jest bardziej przejrzysty.Na koniec użyj czcionki w CSS, tak jak zadeklarowałeś ją w
font-family
części. Jeśli został zadeklarowany wielkimi literami, możesz użyć go w następujący sposób:źródło
config.assets.precompile += %w( .svg .eot .woff .ttf )
jest w rzeczywistości niepoprawny, musisz dodać, aby wstępnie skompilować coś, co pasuje do pełnej nazwy zasobu. Wyrażenie regularne działało dla mnie:config.assets.precompile << /\.(?:svg|eot|woff|ttf)$/
config.assets.paths
jest o referencje zębatkami, nie ma znaczenia tutaj.config.assets.precompile
jest również bezużyteczny, ponieważ „Domyślny moduł do kompilowania plików obejmuje application.js, application.css i wszystkie pliki inne niż JS / CSS (spowoduje to automatyczne włączenie wszystkich zasobów obrazu) z folderów aplikacji / zasobów” (patrz tutaj )Oto zwrot:
- @plapier, thinkbot / bourbon
- @jhilden, thinkbot / bourbon
Przetestowałem to również
rails 4.0.0
. W rzeczywistości ostatni wiersz wystarczy, aby bezpiecznie wstępnie skompilować czcionki zvendor
folderu. Zajęło to kilka godzin, aby to rozgryźć. Mam nadzieję, że to komuś pomogło.źródło
app.config.assets.paths << Rails.root.join('vendor', 'assets', 'fonts')
app.config.assets.precompile << /\.(?:svg|eot|woff|ttf)$/
Komentarz do innej odpowiedzi mówi, że ta ostatnia zajmuje się obiema.app/assets
dane wejściowe do kół łańcuchowych i przyjaciół są przetwarzane jako dane wyjściowepublic/assets
, podczas gdyvendor/assets
nadal mogą być przydatne do wdrażania zasobów bez modyfikacji; oba mają swoje przypadki użycia. Cała konwencja sprzedaży oparta jest na gwarancji, że nic się nie stanievendor/*
. (Tak,vendor/plugins
został wykorzystany do gromadzenia kodu, mania sprzed epoki klejnotów z zamkniętym kodem źródłowym, a ludzie po prostu kopiowali wklejone niewersjonowane pliki js dovendor/assets/javascripts
zasobów przed altaną / szynami.)config/initializers/assets.rb
Jeśli nie chcesz śledzić przenoszenia czcionek:
źródło
config.assets.precompile << /\.(?:svg|eot|woff|ttf)$/
Musisz użyć
font-url
w swoim bloku @ font-face, a nieurl
jak również ten wiersz w application.rb, jak wspomniałeś (dla czcionek w
app/assets/fonts
źródło
src: url(someFont.ttf)
isrc: font-url(someFont.ttf)
pracował przy konieczności plikówapp/assets/fonts
..scss
Domyślnie mam rozszerzenia. Nie musiałem dodawać ścieżek config.assets.path.Oto moje podejście do używania czcionek w potoku zasobów:
1) Umieść cały plik czcionek pod
app/assets/fonts/
, w rzeczywistości nie jesteś ograniczony, aby umieścić go podfonts
nazwą folderu. Możesz podać dowolną nazwę podfolderu. Npapp/assets/abc
lubapp/assets/anotherfonts
. Ale gorąco polecam, aby umieścić go podapp/assets/fonts/
lepszą strukturą folderów.2) Z pliku sass za pomocą pomocnika sass,
font-path
aby poprosić o takie zasoby czcionki3) Uruchom
bundle exec rake assets:precompile
z lokalnego komputera i zobacz wynik application.css. Powinieneś zobaczyć coś takiego:Jeśli chcesz dowiedzieć się więcej, jak działa potok zasobów, możesz odwiedzić następujący prosty przewodnik: https://designcode.commandrun.com/rails-asset-pipeline-simple-guide-830e2e666f6c#.6lejlayk2
źródło
Miałem ten problem na Railsach 4.2 (z Ruby 2.2.3) i musiałem częściowo edytować edytor czcionek _paths.scss, aby usunąć odniesienia do
$fa-font-path
i usunąć wiodący ukośnik. Następujące elementy zostały zepsute:I następujące prace:
Alternatywą byłoby po prostu usunięcie ukośnika po interpolacji,
$fa-font-path
a następnie zdefiniowanie go$fa-font-path
jako pustego łańcucha lub podkatalogu z ukośnikiem (w razie potrzeby).Pamiętaj, aby ponownie skompilować zasoby i zrestartować serwer w razie potrzeby. Na przykład w konfiguracji pasażera:
Następnie załaduj ponownie przeglądarkę.
źródło
Korzystam z Rails 4.2 i nie mogłem wyświetlić wyświetlanych ikon. Pojawiły się małe pola zamiast (+) w zwiniętych wierszach i małe strzałki sortowania, których się spodziewałem. Po przestudiowaniu informacji tutaj dokonałem jednej prostej zmiany w kodzie: usuń katalog czcionek z css. Oznacza to, że zmień wszystkie wpisy css w następujący sposób:
wyglądać tak:
Zadziałało. Myślę, że Rails 4.2 już zakłada katalog czcionek, więc podanie go ponownie w kodzie css powoduje, że nie można znaleźć plików czcionek. Mam nadzieję że to pomoże.
źródło
Miałem podobny problem, kiedy ostatnio zaktualizowałem aplikację Rails 3 do Rails 4. Moje czcionki nie działały poprawnie, tak jak w Rails 4+, wolno nam tylko przechowywać czcionki w
app/assets/fonts
katalogu. Ale moja aplikacja Rails 3 miała inną organizację czcionek. Musiałem więc skonfigurować aplikację tak, aby nadal działała z Railsami 4+, mając moje czcionki w innym miejscu niżapp/assets/fonts
. Wypróbowałem kilka rozwiązań, ale po tym, jak znalazłem klejnot, który nie jest głupi .Dodaj ten klejnot, dodając następujący wiersz do pliku Gemfile:
Następnie uruchomić:
I na koniec dodaj następujący wiersz w pliku config / initializers / non_digest_assets.rb :
Otóż to. To ładnie rozwiązało mój problem. Mam nadzieję, że to pomoże komuś, kto napotkał podobny problem, jak ja.
źródło
Oto repozytorium pokazujące wyświetlanie niestandardowej czcionki w Rails 5.2, która działa na Heroku. To idzie dalej i optymalizuje wyświetlanie czcionek tak szybko, jak to możliwe, zgodnie z https://www.webpagetest.org/
https://github.com/nzoschke/edgecors
Na początek wybrałem kawałki z powyższych odpowiedzi. W przypadku Railsów 5.2+ nie powinieneś potrzebować dodatkowej konfiguracji potoku zasobów.
Rurociąg zasobów i SCSS
app/assets/fonts
@font-face
deklarację w pliku scss i użyjfont-url
pomocnikaOd
app/assets/stylesheets/welcome.scss
:Podawać z CDN z CORS
Korzystam z CloudFront, dodanego z dodatkiem Heroku Edge .
Najpierw skonfiguruj prefiks CDN i domyślne
Cache-Control
nagłówki wproduction.rb
:Jeśli spróbujesz uzyskać dostęp do czcionki z adresu URL herokuapp.com do adresu URL CDN, w przeglądarce pojawi się błąd CORS:
Skonfiguruj więc CORS, aby umożliwić dostęp do czcionki z Heroku do adresu URL CDN:
Podaj zasób czcionek gzip
Rurociąg zasobów tworzy
.ttf.gz
plik, ale go nie obsługuje. Ta małpia łatka zmienia białą listę gzip potoku zasobów na czarną listę:Ostatecznym wynikiem jest niestandardowy plik czcionki
app/assets/fonts
dostarczany z długowiecznej pamięci podręcznej CloudFront.źródło
W moim przypadku pierwotne pytanie było używane
asset-url
bez wyników zamiast zwykłejurl
właściwości css. Używanieasset-url
skończyło się dla mnie działaniem w Heroku. Plus ustawianie czcionek w/assets/fonts
folderze i wywoływanieasset-url('font.eot')
bez dodawania do niego podfolderu lub innej konfiguracji.źródło
Jeśli masz plik o nazwie scaffolds.css.scss, istnieje szansa, że zastąpi wszystkie niestandardowe czynności wykonywane w innych plikach. Skomentowałem ten plik i nagle wszystko zadziałało. Jeśli w tym pliku nie ma nic ważnego, możesz go po prostu usunąć!
źródło
po prostu umieść czcionki w folderze app / asset / fonts i ustaw ścieżkę automatycznego ładowania, gdy aplikacja zacznie używać pisania kodu w application.rb
config.assets.paths << Rails.root.join („aplikacja”, „zasoby”, „czcionki”) i
następnie użyj następującego kodu w css.
@ font-face {
}
Spróbuj.
Dzięki
źródło