Saya memiliki beberapa font yang dikonfigurasi dalam file Scss saya seperti ini:
@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');
}
File font yang sebenarnya disimpan di / app / assets / fonts /
Saya telah menambahkan config.assets.paths << Rails.root.join("app", "assets", "fonts")
ke file application.rb saya
dan kompilasi sumber CSS adalah sebagai berikut:
@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");
}
Tetapi ketika saya menjalankan aplikasi file font tidak ditemukan. Log:
Mulai DAPATKAN "/assets/icoMoon.ttf" untuk 127.0.0.1 di 2012-06-05 23:21:17 +0100 Aset yang dilayani /icoMoon.ttf - 404 Tidak Ditemukan (13ms)
Mengapa pipa aset tidak meratakan file font menjadi adil / aset?
Ada ide orang?
Salam, Neil
Informasi tambahan:
Saat memeriksa konsol rel untuk jalur aset dan kompilasi aset, saya mendapatkan yang berikut:
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
sumber
sumber
font-url
pembantu dalam SCSS di Rails.Jawaban:
Jika versi Rails Anda berada di antara
> 3.1.0
dan< 4
, tempatkan font Anda di salah satu folder ini:app/assets/fonts
lib/assets/fonts
vendor/assets/fonts
Untuk versi Rails
> 4
, Anda harus meletakkan font Anda diapp/assets/fonts
folder.Catatan: Untuk menempatkan font di luar folder yang ditunjuk ini, gunakan konfigurasi berikut:
config.assets.precompile << /\.(?:svg|eot|woff|ttf)\z/
Untuk versi Rails
> 4.2
, disarankan untuk menambahkan konfigurasi iniconfig/initializers/assets.rb
.Namun, Anda juga dapat menambahkannya ke
config/application.rb
, atau keconfig/production.rb
Nyatakan font Anda di file CSS Anda:
Pastikan font Anda dinamai sama persis dengan di bagian URL deklarasi. Huruf kapital dan tanda baca penting. Dalam hal ini, font harus memiliki nama
icomoon
.Jika Anda menggunakan Sass atau Less with Rails
> 3.1.0
(file CSS Anda memiliki.scss
atau.less
ekstensi), maka ubahurl(...)
deklarasi font menjadifont-url(...)
.Jika tidak, file CSS Anda harus memiliki ekstensi
.css.erb
, dan deklarasi font seharusnyaurl('<%= asset_path(...) %>')
.Jika Anda menggunakan Rails
> 3.2.1
, Anda dapat menggunakanfont_path(...)
bukanasset_path(...)
. Pembantu ini melakukan hal yang persis sama tetapi lebih jelas.Akhirnya, gunakan font Anda di CSS Anda seperti Anda mendeklarasikannya di
font-family
bagian. Jika dinyatakan sebagai huruf besar, Anda dapat menggunakannya seperti ini:sumber
config.assets.precompile += %w( .svg .eot .woff .ttf )
sebenarnya salah, Anda perlu menambahkan untuk mengkompilasi sesuatu yang cocok dengan nama aset lengkap. Sebuah regexp bekerja untuk saya:config.assets.precompile << /\.(?:svg|eot|woff|ttf)$/
config.assets.paths
adalah untuk referensi Sprocket, tidak relevan di sini.config.assets.precompile
juga tidak berguna karena "Pencocokan default untuk mengkompilasi file termasuk application.js, application.css dan semua file non-JS / CSS (ini akan mencakup semua aset gambar secara otomatis) dari folder app / aset" (lihat di sini )Sekarang inilah twist:
- @plapier, pikirbot / bourbon
- @jhilden, pikirbot / bourbon
Saya juga sudah mencobanya
rails 4.0.0
. Sebenarnya baris terakhir sudah cukup untuk mengkompilasi font darivendor
folder dengan aman . Butuh beberapa jam untuk mengetahuinya. Semoga ini bisa membantu seseorang.sumber
app.config.assets.paths << Rails.root.join('vendor', 'assets', 'fonts')
app.config.assets.precompile << /\.(?:svg|eot|woff|ttf)$/
Sebuah komentar pada jawaban lain mengatakan bahwa yang terakhir menangani keduanya.app/assets
input ke sprocket dan teman diproses sebagai outputpublic/assets
, sedangkanvendor/assets
masih dapat berguna untuk menggunakan aset tanpa modifikasi; keduanya memiliki kasus penggunaannya. Seluruh konvensi pembatalan didasarkan pada jaminan bahwa tidak akan terjadi apa-apavendor/*
. (Ya,vendor/plugins
disalahgunakan dengan penimbunan kode, sumber mania pra-permata era tertutup dan orang-orang hanya menyalin js tidak berversi yang disisipkan ke dalamvendor/assets/javascripts
aset pre-bower / rails.)config/initializers/assets.rb
Jika Anda tidak ingin melacak pemindahan font Anda:
sumber
config.assets.precompile << /\.(?:svg|eot|woff|ttf)$/
Anda harus menggunakan
font-url
di blok @ font-face Anda, bukanurl
serta baris ini di application.rb, seperti yang Anda sebutkan (untuk font di
app/assets/fonts
sumber
src: url(someFont.ttf)
dansrc: font-url(someFont.ttf)
berfungsi ketika memiliki fileapp/assets/fonts
. Saya memiliki.scss
ekstensi secara default. Saya tidak perlu menambahkan ke config.assets.paths.Di sini pendekatan saya untuk menggunakan font dalam pipa aset:
1) Letakkan semua file font Anda di bawah
app/assets/fonts/
, sebenarnya Anda tidak dibatasi untuk meletakkannya di bawahfonts
nama folder. Anda dapat memasukkan nama subfolder yang Anda suka. Misalnyaapp/assets/abc
atauapp/assets/anotherfonts
. Tetapi saya sangat menyarankan Anda meletakkannya di bawahapp/assets/fonts/
untuk struktur folder yang lebih baik.2) Dari file sass Anda, gunakan helper sass
font-path
untuk meminta aset font Anda seperti ini3) Jalankan
bundle exec rake assets:precompile
dari mesin lokal Anda dan lihat hasil application.css Anda. Anda harus melihat sesuatu seperti ini:Jika Anda ingin tahu lebih banyak tentang cara kerja pipeline aset, Anda dapat mengunjungi panduan sederhana berikut: https://designcode.commandrun.com/rails-asset-pipeline-simple-guide-830e2e666f6c#.6lejlayk2
sumber
Saya mengalami masalah ini pada Rails 4.2 (dengan ruby 2.2.3) dan harus mengedit parsial font-awesome _paths.scss untuk menghapus referensi
$fa-font-path
dan menghapus garis miring ke depan. Berikut ini rusak:Dan karya-karya berikut:
Alternatifnya adalah dengan hanya menghapus garis miring mengikuti interpolasi
$fa-font-path
dan kemudian mendefinisikan$fa-font-path
sebagai string kosong atau subdirektori dengan garis miring ke depan (sesuai kebutuhan).Ingatlah untuk mengkompilasi ulang aset dan mulai ulang server Anda sesuai kebutuhan. Misalnya, pada pengaturan penumpang:
Kemudian muat ulang browser Anda.
sumber
Saya menggunakan Rails 4.2, dan tidak dapat menampilkan ikon yang dapat ditampilkan. Kotak-kotak kecil ditampilkan, alih-alih (+) pada baris yang diciutkan dan panah sortir kecil yang saya harapkan. Setelah mempelajari informasi di sini, saya membuat satu perubahan sederhana pada kode saya: hapus direktori font di css. Artinya, ubah semua entri css seperti ini:
agar terlihat seperti ini:
Itu berhasil. Saya pikir Rails 4.2 sudah mengasumsikan direktori font, jadi menetapkannya lagi dalam kode css membuat file font tidak ditemukan. Semoga ini membantu.
sumber
Saya memiliki masalah serupa ketika saya meningkatkan aplikasi Rails 3 saya ke Rails 4 baru-baru ini. Font saya tidak berfungsi sebagaimana mestinya di Rails 4+, kami hanya diperbolehkan menyimpan font di bawah
app/assets/fonts
direktori. Tetapi aplikasi Rails 3 saya memiliki organisasi font yang berbeda. Jadi saya harus mengkonfigurasi aplikasi sehingga masih berfungsi dengan Rails 4+ memiliki font saya di tempat lain selainapp/assets/fonts
. Saya telah mencoba beberapa solusi tetapi setelah saya menemukan permata non-bodoh-intisari aset , itu membuatnya sangat mudah.Tambahkan permata ini dengan menambahkan baris berikut ke Gemfile Anda:
Lalu lari:
Dan akhirnya tambahkan baris berikut di file config / initializers / non_digest_assets.rb Anda :
Itu dia. Ini memecahkan masalah saya dengan baik. Semoga ini bisa membantu seseorang yang mengalami masalah serupa seperti saya.
sumber
Berikut adalah repo yang menunjukkan melayani font khusus dengan Rails 5.2 yang berfungsi pada Heroku. Ia melangkah lebih jauh dan mengoptimalkan penyajian font secepat mungkin menurut https://www.webpagetest.org/
https://github.com/nzoschke/edgecors
Untuk memulai, saya mengambil bagian dari jawaban di atas. Untuk Rails 5.2+ Anda tidak perlu memerlukan konfigurasi pipa aset tambahan.
Pipa Aset dan SCSS
app/assets/fonts
@font-face
deklarasi dalam file scss dan gunakanfont-url
helperDari
app/assets/stylesheets/welcome.scss
:Sajikan dari CDN dengan CORS
Saya menggunakan CloudFront, ditambahkan dengan addon Heroku Edge .
Pertama-tama konfigurasikan awalan CDN dan
Cache-Control
tajuk default diproduction.rb
:Jika Anda mencoba mengakses font dari URL herokuapp.com ke URL CDN, Anda akan mendapatkan kesalahan CORS di browser Anda:
Jadi konfigurasikan CORS untuk memungkinkan akses ke font dari Heroku ke URL CDN:
Sajikan Aset Font gzip
Pipeline aset membuat
.ttf.gz
file tetapi tidak menayangkannya. Patch monyet ini mengubah daftar putih gzip jalur pipa aset ke daftar hitam:Hasil akhirnya adalah file font khusus yang
app/assets/fonts
disajikan dari cache CloudFront yang berumur panjang.sumber
Dalam kasus saya, pertanyaan awal menggunakan
asset-url
tanpa hasil alih-alihurl
properti css biasa . Menggunakanasset-url
akhirnya bekerja untuk saya di Heroku. Ditambah pengaturan font di/assets/fonts
folder dan panggilanasset-url('font.eot')
tanpa menambahkan subfolder atau konfigurasi lainnya.sumber
Jika Anda memiliki file bernama scaffolds.css.scss, maka ada peluang yang mengesampingkan semua hal khusus yang Anda lakukan di file lain. Saya berkomentar file itu dan tiba-tiba semuanya bekerja. Jika tidak ada sesuatu yang penting dalam file itu, Anda bisa menghapusnya!
sumber
cukup tempatkan font Anda di dalam folder app / assets / fonts dan atur jalur muat otomatis ketika aplikasi mulai menggunakan penulisan kode di application.rb
config.assets.paths << Rails.root.join ("app", "aset", "font") dan
kemudian gunakan kode berikut dalam css.
@ font-face {
}
Cobalah.
Terima kasih
sumber