Di Rails 3, permata yang digunakan secara eksklusif untuk menghasilkan aset dalam pipa aset ditempatkan dengan benar di assets
grup Gemfile:
...
# Gems used only for assets and not required
# in production environments by default.
group :assets do
gem 'sass-rails'
gem 'coffee-rails'
gem 'uglifier'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', :platforms => :ruby
end
Sekarang, menurut dokumentasi peningkatan (masih dalam proses) :
Rails 4.0 menghapus grup aset dari Gemfile. Anda harus menghapus baris itu dari Gemfile Anda saat meningkatkan.
Benar saja, membuat proyek baru dengan RC1 menghasilkan Gemfile dengan permata terkait aset yang disertakan secara default di luar grup mana pun:
source 'https://rubygems.org'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.0.0.rc1'
# Use sqlite3 as the database for Active Record
gem 'sqlite3'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.0.rc1'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', '~> 4.0.0'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby
...
Apakah ini berarti permata ini sekarang akan dibundel dalam build produksi secara default? Jika demikian, mengapa berubah hati? Apakah Rails 4 bergerak menuju pembuatan aset yang dinamis dalam produksi?
asset-pipeline
ruby-on-rails-4
jemmons
sumber
sumber
RAILS_GROUPS=assets
(lihatRails.groups
) sebelum perintah untuk memprakompilasi aset dalam produksi di lingkungan build Anda.Jawaban:
Sebelumnya, grup aset ada untuk menghindari kompilasi sesuai permintaan yang tidak diinginkan dalam produksi. Karena Rails 4 tidak berperilaku seperti itu lagi, masuk akal untuk menghapus grup aset.
Ini dijelaskan lebih detail dalam komit yang mengubahnya. Saya mengekstrak beberapa kutipan dengan jawaban sebenarnya.
sumber
Rails 4 mencoba memaksa Anda untuk mengkompilasi aset Anda sebelum penyebaran. Anda harus melakukan prakompilasi aset Anda dengan
Dan mengapa? Saya menemukan ini di Panduan:
(Sumber: http://edgeguides.rubyonrails.org/asset_pipeline.html#in-production )
Tetapi seringkali Anda harus menggunakan permata 'aset' ini dalam produksi ... misalnya, jika Anda menggunakan file js.coffee di direktori views Anda, maka Rails juga memerlukan kompiler kopi dalam mode produksi.
Jadi saya rasa, alasan dari perubahan ini adalah peningkatan performa ... dan terlihat lebih sederhana juga. :)
sumber
assets
kelompok, tidak mendapatkan menyingkirkan itu (jika aset tersebut dikompilasi, maka permata ini tidak diperlukan dalam produksi dan seharusnya tidak dimasukkan oleh bundler). Dan ya, mungkin Anda akan menggunakan permata seperticoffee-rails
dalam produksi ... tapi itu juga terjadi di Rails 3, bukan? Dan Rails 3 dimasukkan kecoffee-rails
dalamassets
grup, secara default. Jadi mengapa perubahan untuk Rails 4?Kami ingin coffeescript dengan AJAX ( sejarah ), jadi
coffee-rails
keluar dari grup aset.sass-rails
berperilaku buruk ( riwayat ), sehingga keluar dari grup aset.Kapak grup aset.
sumber
Bundler.require :assets
tidak dijalankan. Itu bukan alasan untuk menghapus grup aset. Saya tidak ingin therubyracer, libv8 et c. pada produksi, mengapa ada yang melakukannya? Template kopi dapat dikompilasi ke template JS, dan tidak ada gunanya mengkompilasinya setiap kali nilai baru diganti. Tidak ada gunanya mengambil semua beban ini untuk produksi.