У меня есть несколько шрифтов, настроенных в моем файле Scss, например:
@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');
}
Фактический файл шрифта хранится в / app / assets / fonts /
Я добавил config.assets.paths << Rails.root.join("app", "assets", "fonts")
в свой файл application.rb
и исходный код CSS для компиляции выглядит следующим образом:
@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");
}
Но когда я запускаю приложение, файлы шрифтов не обнаруживаются. Журналы:
Запущен GET "/assets/icoMoon.ttf" для 127.0.0.1 в 2012-06-05 23:21:17 +0100 Обслуживаемый актив /icoMoon.ttf - 404 Not Found (13ms)
Почему конвейер ресурсов не сглаживает файлы шрифтов просто в / assets?
Есть идеи, люди?
С наилучшими пожеланиями, Нил
Дополнительная информация:
Когда я проверяю консоль rails на наличие путей к ресурсам и предварительную компиляцию, я получаю следующее:
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
font-url
помощник в SCSS в Rails.Ответы:
Если ваша версия Rails находится между
> 3.1.0
и< 4
, поместите ваши шрифты в любую из следующих папок:app/assets/fonts
lib/assets/fonts
vendor/assets/fonts
Для версий Rails
> 4
вы должны поместить свои шрифты вapp/assets/fonts
папку.Примечание. Чтобы разместить шрифты вне указанных папок, используйте следующую конфигурацию:
config.assets.precompile << /\.(?:svg|eot|woff|ttf)\z/
Для версий Rails
> 4.2
, то рекомендуется добавить эту конфигурациюconfig/initializers/assets.rb
.Тем не менее, вы можете также добавить его либо
config/application.rb
, илиconfig/production.rb
Объявите свой шрифт в своем файле CSS:
Убедитесь, что ваш шрифт назван точно так же, как в части URL объявления. Заглавные буквы и знаки препинания имеют значение. В этом случае шрифт должен иметь название
icomoon
.Если вы используете Sass или менее Rails
> 3.1.0
(файл CSS имеет.scss
или.less
расширение), то изменитьurl(...)
в объявлении шрифта вfont-url(...)
.В противном случае ваш CSS-файл должен иметь расширение
.css.erb
, а объявление шрифта должно бытьurl('<%= asset_path(...) %>')
.Если вы используете Rails
> 3.2.1
, вы можете использоватьfont_path(...)
вместоasset_path(...)
. Этот помощник делает то же самое, но это более понятно.Наконец, используйте свой шрифт в своем CSS, как вы объявили в этой
font-family
части. Если он был объявлен заглавными, вы можете использовать его следующим образом:источник
config.assets.precompile += %w( .svg .eot .woff .ttf )
на самом деле неправильно, вам нужно добавить, чтобы предварительно скомпилировать то, что соответствует полному имени ресурса. У меня сработало регулярное выражение:config.assets.precompile << /\.(?:svg|eot|woff|ttf)$/
config.assets.paths
это для ссылок Sprockets, здесь не актуально.config.assets.precompile
также бесполезен, потому что «Сопоставление по умолчанию для компиляции файлов включает application.js, application.css и все файлы, не относящиеся к JS / CSS (это будет включать все ресурсы изображений автоматически) из папок app / assets» (см. здесь )Теперь вот поворот:
- @plapier, мыслибот / бурбон
- @jhilden, мыслебот / бурбон
Я также проверил это на
rails 4.0.0
. На самом деле последней строки достаточно, чтобы безопасно скомпилировать шрифты изvendor
папки. Потребовалось пару часов, чтобы понять это. Надеюсь, это помогло кому-то.источник
app.config.assets.paths << Rails.root.join('vendor', 'assets', 'fonts')
app.config.assets.precompile << /\.(?:svg|eot|woff|ttf)$/
Комментарий к другому ответу говорит, что последний заботится об обоих.app/assets
входные данные для звездочек и друзей обрабатываются как выходныеpublic/assets
, тогда какvendor/assets
все еще могут быть полезны для развертывания ресурсов без изменений; у обоих есть свои варианты использования. Все соглашение о продаже базируется на гарантии того, что ничего не случитсяvendor/*
. (Да,vendor/plugins
он подвергался злоупотреблениям из-за сокрытия кода, мании pre-gem с закрытым исходным кодом, и люди просто копировали неверсированные js вvendor/assets/javascripts
pre-bower / rails-assets.)config/initializers/assets.rb
Если вы не хотите отслеживать перемещение шрифтов:
источник
config.assets.precompile << /\.(?:svg|eot|woff|ttf)$/
Вы должны использовать
font-url
в своем блоке @ font-face, а неurl
а также эту строку в application.rb, как вы упомянули (для шрифтов в
app/assets/fonts
источник
src: url(someFont.ttf)
иsrc: font-url(someFont.ttf)
работал, имея файлыapp/assets/fonts
. У меня есть.scss
расширения по умолчанию. Мне не нужно было добавлять в config.assets.paths.Вот мой подход к использованию шрифтов в конвейере ресурсов:
1) Поместите все ваши файлы шрифтов под
app/assets/fonts/
, на самом деле вы не ограничены, чтобы поместить его подfonts
именем папки. Вы можете указать любое имя подпапки. Например,app/assets/abc
илиapp/assets/anotherfonts
. Но я настоятельно рекомендую вам положить егоapp/assets/fonts/
для лучшей структуры папок.2) Из вашего sass-файла используйте помощника sass
font-path
для запроса таких ресурсов шрифта, как этот3) Запустите
bundle exec rake assets:precompile
с локального компьютера и посмотрите результат application.css. Вы должны увидеть что-то вроде этого:Если вы хотите узнать больше о том, как работает конвейер активов, вы можете посетить следующее простое руководство: https://designcode.commandrun.com/rails-asset-pipeline-simple-guide-830e2e666f6c#.6lejlayk2
источник
У меня возникла эта проблема в Rails 4.2 (с ruby 2.2.3), и мне пришлось отредактировать частичку font-awesome _paths.scss, чтобы удалить ссылки
$fa-font-path
и удалить косую черту. Следующее было сломано:И следующие работы:
Альтернативой было бы просто удалить косую черту после интерполированной,
$fa-font-path
а затем определить$fa-font-path
как пустую строку или подкаталог с косой чертой (при необходимости).Не забудьте перекомпилировать ресурсы и перезапустить сервер по мере необходимости. Например, на пассажирской установке:
Затем перезагрузите браузер.
источник
Я использую Rails 4.2, и мне не удалось отобразить иконки footable. Вместо (+) на свернутых строках и маленьких сортировочных стрелок, которые я ожидал, показывались маленькие прямоугольники. Изучив информацию здесь, я внес одно простое изменение в свой код: удалил каталог шрифтов в css. То есть измените все записи CSS следующим образом:
выглядеть так:
Это сработало. Я думаю, что Rails 4.2 уже использует каталог шрифтов, поэтому повторное указание его в коде css делает файлы шрифтов не найденными. Надеюсь это поможет.
источник
У меня была похожая проблема, когда я недавно обновил свое приложение Rails 3 до Rails 4. Мои шрифты не работали должным образом, как в Rails 4+, нам разрешено хранить шрифты только в
app/assets/fonts
каталоге. Но мое приложение Rails 3 имело другую организацию шрифтов. Поэтому мне пришлось настроить приложение так, чтобы оно по-прежнему работало с Rails 4+, где мои шрифты были в другом месте, кромеapp/assets/fonts
. Я попробовал несколько решений, но после того, как я нашел драгоценный камень non-stupid-digest-assets , он стал таким простым.Добавьте этот драгоценный камень, добавив следующую строку в ваш Gemfile:
Затем запустите:
И, наконец, добавьте следующую строку в ваш файл config / initializers / non_digest_assets.rb :
Вот и все. Это решило мою проблему красиво. Надеюсь, это поможет кому-то, кто столкнулся с подобной проблемой, как я.
источник
Вот репозиторий, демонстрирующий использование пользовательского шрифта с Rails 5.2, который работает на Heroku. Это идет дальше и оптимизирует обслуживание шрифтов, чтобы быть максимально быстрым согласно https://www.webpagetest.org/
https://github.com/nzoschke/edgecors
Для начала я выбрал кусочки из ответов выше. Для Rails 5.2+ вам не понадобится дополнительная конфигурация конвейера активов.
Asset Pipeline и SCSS
app/assets/fonts
@font-face
объявление в файл scss и используйтеfont-url
помощникОт
app/assets/stylesheets/welcome.scss
:Подавать из CDN с CORS
Я использую CloudFront, добавленный с помощью дополнения Heroku Edge .
Сначала настройте префикс CDN и
Cache-Control
заголовки по умолчанию вproduction.rb
:Если вы попытаетесь получить доступ к шрифту с URL-адреса herokuapp.com по URL-адресу CDN, вы получите сообщение об ошибке CORS в своем браузере:
Поэтому настройте CORS, чтобы разрешить доступ к шрифту из Heroku по URL CDN:
Служить gzip Font Asset
Конвейер ресурсов создает
.ttf.gz
файл, но не обслуживает его. Этот патч обезьяны изменяет белый список gzip конвейера ресурсов на черный список:Конечным результатом является пользовательский файл шрифта, который
app/assets/fonts
подается из долгоживущего кеша CloudFront.источник
В моем случае оригинальный вопрос использовался
asset-url
без результатов вместо простогоurl
свойства CSS. Использование вasset-url
конечном итоге работает на меня в Heroku. Плюс установка шрифтов в/assets/fonts
папке и вызовasset-url('font.eot')
без добавления какой-либо подпапки или любой другой конфигурации.источник
Если у вас есть файл с именем scaffolds.css.scss, то есть шанс, что он переопределит все пользовательские действия, которые вы делаете в других файлах. Я закомментировал этот файл, и вдруг все заработало. Если в этом файле нет ничего важного, вы можете просто удалить его!
источник
просто поместите ваши шрифты в папку app / assets / fonts и установите путь автозагрузки, когда приложение начнет использовать написание кода в application.rb
config.assets.paths << Rails.root.join ("приложение", "активы", "шрифты") и
затем используйте следующий код в CSS.
@ font-face {
}
Попробуйте.
Спасибо
источник