Ada masalah aneh dengan Rails 4 di Heroku. Ketika gambar dikompilasi, mereka memiliki hash yang ditambahkan ke dalamnya, namun referensi ke file-file dari dalam CSS tidak memiliki nama yang tepat disesuaikan. Inilah yang saya maksud. Saya memiliki file bernama logo.png. Namun ketika muncul di heroku itu dipandang sebagai:
/assets/logo-200a00a193ed5e297bb09ddd96afb953.png
Namun CSS masih menyatakan:
background-image:url("./logo.png");
Hasilnya: gambar tidak ditampilkan. Adakah yang mengalami hal ini? Bagaimana ini bisa diselesaikan?
ruby-on-rails
heroku
ruby-on-rails-4
Nick ONeill
sumber
sumber
Jawaban:
Sprockets bersama dengan Sass memiliki beberapa helper bagus yang dapat Anda gunakan untuk menyelesaikan pekerjaan. Sprockets hanya akan memproses bantuan ini jika ekstensi file stylesheet Anda salah satu
.css.scss
atau.css.sass
.Pembantu khusus gambar:
Pembantu agnostik:
Atau jika Anda ingin menyematkan data gambar dalam file css:
sumber
asset-data-url
berfungsi untuk saya setelah saya mengubah file .css menjadi file .css.scss dalam aplikasi Rails 4. Terima kasih!asset-data-url
karena menanamkan seluruh file di dalam stylesheet.sass-rails
saya akhirnya menambahkan ekstensi file.scss
ke file .css yang menyinggung sehingga semuanya berakhir.css.scss
, lalu mengganti semua instanceurl('blah.png')
denganurl(asset-path('blah.png'))
(dalam kasus saya semua blah.pngs dalam/vendor
ed map).asset-url($asset)
harus digunakan untuk sprockets 3, versi dengan$asset-type
mungkin bekerja dengan beberapa versi yang lebih lamaTidak tahu mengapa, tetapi satu-satunya hal yang berhasil bagi saya adalah menggunakan asset_path alih - alih image_path , meskipun gambar saya berada di bawah aset / gambar / direktori :
Contoh:
Di Ruby:
Dalam .scss:
MEMPERBARUI:
Mengira itu ternyata pembantu aset ini berasal dari permata sass-rails (yang telah saya pasang di proyek saya).
sumber
background-image: url(asset-path('off.png'))
Di Rails 4, Anda dapat referensi gambar yang terletak di
assets/images/
dalam.SCSS
file Anda dengan mudah seperti ini:Saat Anda meluncurkan aplikasi dalam mode pengembangan (
localhost:3000
), Anda akan melihat sesuatu seperti:Dalam mode produksi, aset Anda akan memiliki nomor pembantu cache:
sumber
production.rb
.Hash adalah karena pipeline aset dan server Optimalkan caching http://guides.rubyonrails.org/asset_pipeline.html
Coba sesuatu seperti ini:
Semoga berhasil
sumber
.css
tidak berhasil untuk saya.Dalam css
walaupun path aslinya adalah /assets/images/banner.jpg, dengan konvensi Anda harus menambahkan just / assets / dalam metode url
sumber
vendor/assets
,app/assets
,lib/assets
, dll) dikombinasikan menjadi aset tunggal folder setelah prepossessing selesai?/assets/banner.jpg
tidak akan berfungsi. Sebaliknya itu akan menjadi sesuatu seperti/assets/banner-f719451f1e0ddd15f153c4eedde044b2.jpg
. TL; DR Jangan gunakan ini.Tidak ada jawaban yang mengatakan tentang cara, ketika saya akan memiliki
.css.erb
ekstensi, cara referensi gambar . Bagi saya bekerja di bidang produksi dan pengembangan juga:2.3.1 CSS dan ERB
Pipa aset secara otomatis mengevaluasi ERB . Ini berarti jika Anda menambahkan ekstensi erb ke aset CSS (misalnya,
application.css.erb
), maka pembantu sepertiasset_path
tersedia di aturan CSS Anda:Ini menulis jalan menuju aset tertentu yang dirujuk. Dalam contoh ini, masuk akal untuk memiliki gambar di salah satu jalur pemuatan aset, seperti
app/assets/images/image.png
, yang akan dirujuk di sini. Jika gambar ini sudah tersediapublic/assets
sebagai file sidik jari, maka jalur itu dirujuk.Jika Anda ingin menggunakan URI data - metode penyisipan data gambar langsung ke file CSS - Anda dapat menggunakan
asset_data_uri
helper.Ini memasukkan URI data yang diformat dengan benar ke dalam sumber CSS.
Perhatikan bahwa tag penutup tidak boleh dengan gaya -%>.
sumber
Hanya cuplikan ini yang tidak berfungsi untuk saya:
Tetapi mengubah nama stylename.scss menjadi stylename.css.scss membantu saya.
sumber
Referensi dokumen Rails kita melihat bahwa ada beberapa cara untuk link gambar dari css. Pergi ke bagian 2.3.2.
Pertama, pastikan file css Anda memiliki ekstensi .scss jika itu file sass.
Selanjutnya, Anda dapat menggunakan metode ruby, yang benar-benar jelek:
Atau Anda dapat menggunakan formulir khusus yang lebih bagus:
Terakhir, Anda dapat menggunakan formulir umum:
sumber
APA YANG SAYA TELAH DITEMUKAN SETELAH JAM MUCKING DENGAN INI:
KARYA:
Output di atas seperti:
"/assets/transparent_2x2-ec47061dbe4fb88d51ae1e7f41a146db.png"
Perhatikan "/" yang utama , dan itu dalam tanda kutip . Perhatikan juga ekstensi scss dan image_path helper di yourstylesheet.css.scss. Gambar ada di direktori app / assets / images .
Tidak bekerja:
tidak berfungsi, properti tidak valid:
Pilihan terakhir saya adalah memasukkannya ke ember s3 publik saya dan memuatnya dari sana, tetapi akhirnya berhasil.
sumber
Menariknya, jika saya menggunakan 'gambar latar', itu tidak berfungsi:
Tapi hanya 'latar belakang', itu tidak:
sumber
Dalam beberapa kasus berikut ini juga bisa menjadi applier
logo {background: url (<% = asset_data_uri 'logo.png'%>)}
Sumber: http://guides.rubyonrails.org/asset_pipeline.html
sumber
Saat menggunakan gem 'sass-rails', di Rails 5, bootstrap 4, berikut ini bekerja untuk saya,
dalam file .scss:
dalam file tampilan (misalnya .html.slim):
sumber
Ini akan membuat Anda sampai di sana setiap saat.
sumber
Secara default Rails 4 tidak akan melayani aset Anda. Untuk mengaktifkan fungsi ini, Anda perlu masuk ke config / application.rb dan tambahkan baris ini:
https://devcenter.heroku.com/articles/rails-4-asset-pipeline#serve-assets
sumber
Di Rails 4, cukup gunakan
.hero { background-image: url("picture.jpg"); }
sumber
Anda dapat menambahkan ekstensi css .erb Anda. Ej: style.css.erb
Maka Anda dapat menempatkan:
sumber
Ini bekerja untuk saya:
sumber