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
Author: Sean Huber, 2012-06-06

11 answers

  1. 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 folderze app/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 > 4.2, jest zalecane aby dodać tę konfigurację do config/initializers/assets.rb.

    Można go jednak dodać również do config/application.rb, lub do config/production.rb
  2. 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.

  3. 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 na font-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(...) zamiast asset_path(...). Ten Pomocnik robi dokładnie to samo, ale jest bardziej przejrzysty.

  4. 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';
    
 622
Author: Ashitaka,
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 w app/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.

 37
Author: jibiel,
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
}
 23
Author: Nathan Colgate,
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")
 15
Author: craic.com,
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

 9
Author: Tim,
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ę.

 5
Author: markeissler,
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.
 5
Author: Brian Doherty,
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.
 2
Author: K M Rakibul Islam,
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.

 2
Author: bartoindahouse,
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ąć!

 1
Author: katfa,
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

 -6
Author: Shoaib Malik,
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