Korzystanie z czcionek w potoku zasobów Rails
Mam kilka czcionek skonfigurowanych w moim pliku Scss Tak:
@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 czcionki jest przechowywany w /app / assets / fonts /
Dodałem config.assets.paths << Rails.root.join("app", "assets", "fonts")
do mojej aplikacji.plik rb
I źródło kompilacji CSS jest następujące:
@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 po uruchomieniu aplikacji Pliki Czcionek nie są znalezione. Dzienniki:
Rozpoczął GET " / assets / icoMoon.ttf" dla 127.0.0.1 at 2012-06-05 23: 21: 17 +0100 Serwowane aktywa / icoMoon.TTF-404 Nie znaleziono (13ms)
Dlaczego potok zasobów nie spłaszcza plików czcionek do tylko /assets?
Jakieś pomysły?Z poważaniem, Neil
Dodatkowe informacje:
Podczas sprawdzania konsoli rails pod kątem ścieżek zasobów i assetprecompile 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
11 answers
-
Jeśli Twoja wersja Rails znajduje się pomiędzy
> 3.1.0
i< 4
, umieść swoje czcionki w jednym z tych folderów:app/assets/fonts
lib/assets/fonts
vendor/assets/fonts
Dla wersji Rails
> 4
, musisz umieścić swoje czcionki w folderzeapp/assets/fonts
.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
Można go jednak dodać również do> 4.2
, jest zalecane aby dodać tę konfigurację doconfig/initializers/assets.rb
.config/application.rb
, lub doconfig/production.rb
-
Zadeklaruj swoją czcionkę w pliku 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; }
Upewnij się, że Twoja czcionka ma taką samą nazwę jak w części URL deklaracji. Duże litery i znaki interpunkcyjne mają znaczenie. W takim przypadku czcionka powinna mieć nazwę
icomoon
. -
Jeśli używasz Sass lub mniej z Rails
> 3.1.0
(Twój plik CSS ma.scss
lub.less
rozszerzenie), a następnie zmieńurl(...)
w deklaracji czcionki nafont-url(...)
.W Przeciwnym Razie plik CSS powinien mieć rozszerzenie
.css.erb
, a deklaracja czcionki powinna byćurl('<%= asset_path(...) %>')
.Jeśli używasz Rails
> 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 swojej czcionki w CSS, tak jak zadeklarowałeś ją w części
font-family
. Jeśli został zadeklarowany wielkimi literami, możesz go użyć jak to:font-family: 'Icomoon';
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-07 16:25:35
Oto zwrot akcji:
Należy umieścić wszystkie czcionki w
app/assets/fonts/
, ponieważ będą domyślnie wstępnie skompilowane w stagingu i produkcji-będą wstępnie skompilowane po naciśnięciu przyciskuheroku .Pliki Czcionek umieszczone w
vendor/assets
będą domyślnie , a nie wstępnie skompilowane na stagingu lub produkcji - nie będą działać na heroku. Źródło!
- @plapier, thoughtbot / bourbon
Mocno wierzę, że umieszczanie czcionek vendora w
vendor/assets/fonts
ma to o wiele większy sens niż umieszczenie ich wapp/assets/fonts
. Z te 2 linijki dodatkowej konfiguracji to mi dobrze wyszło (na Rails 4):
app.config.assets.paths << Rails.root.join('vendor', 'assets', 'fonts')
app.config.assets.precompile << /\.(?:svg|eot|woff|ttf)$/
- @jhilden, thoughtbot / bourbon
Przetestowałem go również na rails 4.0.0
. W rzeczywistości ostatnia linijka wystarcza do bezpiecznego prekompilowania czcionek z folderu vendor
. Rozgryzienie tego zajęło kilka godzin. Mam nadzieję, że komuś to pomogło.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-12 14:34:00
Jeśli nie chcesz śledzić przesuwania czcionek:
# Adding Webfonts to the Asset Pipeline
config.assets.precompile << Proc.new { |path|
if path =~ /\.(eot|svg|ttf|woff)\z/
true
end
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-28 14:36:47
Musisz użyć font-url
w bloku @ font-face, a nie url
@font-face {
font-family: 'Inconsolata';
src:font-url('Inconsolata-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
Jak również tej linii w aplikacji.rb, jak wspomniałeś (dla czcionek w app/assets/fonts
config.assets.paths << Rails.root.join("app", "assets", "fonts")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-22 17:40:25
Oto moje podejście do korzystania z czcionek w potoku zasobów:
1) Umieść cały plik czcionki w app/assets/fonts/
, w rzeczywistości nie masz ograniczeń, aby umieścić go w fonts
Nazwa folderu. Możesz umieścić dowolną nazwę podfolderu. Np. app/assets/abc
lub app/assets/anotherfonts
. Ale Gorąco polecam umieścić go pod app/assets/fonts/
dla lepszej struktury folderów.
2) z pliku sass, używając helpera sass font-path
, aby zażądać zasobów czcionek w ten sposób
@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) Uruchom bundle exec rake assets:precompile
z lokalnej Maszyny i zobacz swoje podanie.wynik css. Powinieneś zobaczyć coś takiego:
@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;
}
Jeśli chcesz dowiedzieć się więcej o funkcjonowaniu potoku zasobów, zapoznaj się z poniższym prostym przewodnikiem: https://designcode.commandrun.com/rails-asset-pipeline-simple-guide-830e2e666f6c#.6lejlayk2
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-14 04:54:43
Miałem ten problem na Rails 4.2 (z Rubim 2.2.3) i musiałem edytować czcionkę-awesome _paths.scss częściowo usuwa odniesienia do $fa-font-path
i usuwa ukośnik przedni. Poniższy został złamany:
@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;
}
I następujące dzieła:
@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;
}
Alternatywą byłoby po prostu usunięcie ukośnika po interpolowanym $fa-font-path
, a następnie zdefiniowanie $fa-font-path
jako pustego ciągu lub podkatalogu z kończącym się ukośnikiem (w razie potrzeby).
Pamiętaj o przekompilowaniu zasoby i uruchom ponownie serwer w razie potrzeby. Na przykład w konfiguracji pasażerskiej:
prompt> rake assets:clean; rake assets:clobber
prompt> RAILS_ENV=production RAILS_GROUPS=assets rake assets:precompile
prompt> service passenger restart
Następnie przeładuj przeglądarkę.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-15 21:48:14
Używam Rails 4.2, i nie mogę uzyskać footable ikony, aby pokazać się. Pokazywały się małe pudełka, zamiast ( + ) na zwiniętych rzędach i małych strzałkach sortujących, których się spodziewałem. Po zapoznaniu się z informacjami tutaj, zrobiłem jedną prostą zmianę w moim kodzie: Usuń katalog czcionek w css. Oznacza to, że zmień wszystkie wpisy css w ten sposób:
src:url('fonts/footable.eot');
Wyglądać tak:
src:url('footable.eot');
Zadziałało. Myślę, że Rails 4.2 zakłada już katalog czcionek, więc podanie go ponownie w css kod sprawia, że pliki czcionek nie zostaną znalezione. Mam nadzieję, że to pomoże.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-14 04:55:18
Miałem podobny problem, gdy niedawno uaktualniłem moją aplikację Rails 3 do Rails 4. Moje czcionki nie dziaĹ ' ajÄ ... poprawnie tak jak w Rails 4+, moĹźemy jedynie trzymaÄ ‡ je w katalogu app/assets/fonts
. Ale moja aplikacja Rails 3 miała inną organizację czcionek. Musiałem więc skonfigurować aplikację tak, aby nadal działała z Rails 4+ mając moje czcionki w innym miejscu niż app/assets/fonts
. Próbowałem kilku rozwiązań, ale po znalezieniu non-stupid-digest-assets gem, to po prostu sprawiło, że tak spokojnie.
Dodaj ten klejnot, dodając następujący wiersz do pliku klejnotów:
gem 'non-stupid-digest-assets'
Następnie uruchom:
bundle install
I na koniec dodaj następujący wiersz w config/initializers/non_digest_assets.RB plik:
NonStupidDigestAssets.whitelist = [ /\.(?:svg|eot|woff|ttf)$/ ]
To wszystko. To ładnie rozwiązało mój problem. Mam nadzieję, że pomoże to komuś, kto napotkał podobny problem jak ja.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-24 16:27:53
W moim przypadku pierwotnym pytaniem było użycie asset-url
bez wyników zamiast zwykłej właściwości url
css. Używanie asset-url
skończyło się dla mnie pracą w Heroku. Plus ustawianie czcionek w folderze /assets/fonts
i wywołanie asset-url('font.eot')
bez dodawania do niego żadnego podfolderu lub innej konfiguracji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-27 15:56:10
Jeśli Masz plik o nazwie rusztowania.css.scss, więc jest szansa, że nadpisuje wszystkie niestandardowe rzeczy, które robisz w innych plikach. Skomentowałem te akta i nagle wszystko zadziałało. Jeśli w tym pliku nie ma nic ważnego, równie dobrze możesz go usunąć!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-27 13:05:45
Po prostu umieść swoje czcionki w folderze app / assets/fonts i ustaw ścieżkę automatycznego ładowania, gdy aplikacja zacznie używać pisania kodu w aplikacji.rb
Config.aktywa.ścieżki oraz
Następnie użyj poniższego kodu w css.
@ font-face {
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;
}
Spróbuj.Thanks
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-13 06:48:39