In Rails 3 wurden Edelsteine, die ausschließlich zur Generierung von Assets in der Asset-Pipeline verwendet wurden, ordnungsgemäß in die assets
Gruppe der Gemfile eingefügt:
...
# 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
Laut der (noch laufenden) Upgrade-Dokumentation :
Rails 4.0 hat die Assets-Gruppe aus Gemfile entfernt. Sie müssten diese Zeile beim Upgrade aus Ihrer Gemfile entfernen.
Sicher genug, wenn Sie ein neues Projekt mit RC1 erstellen, erhalten Sie eine Gem-Datei mit Asset-bezogenen Gems, die standardmäßig außerhalb einer Gruppe enthalten sind:
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
...
Bedeutet dies, dass diese Edelsteine jetzt standardmäßig in Produktions-Builds gebündelt werden? Wenn ja, warum die Veränderung des Herzens? Bewegt sich Rails 4 in Richtung einer dynamischen Generierung von Assets in der Produktion?
asset-pipeline
ruby-on-rails-4
Jemmons
quelle
quelle
RAILS_GROUPS=assets
(sieheRails.groups
), um Assets in der Produktion in Ihrer Build-Umgebung vorkompilieren zu können.Antworten:
Zuvor bestand die Asset-Gruppe, um eine unbeabsichtigte Kompilierung nach Bedarf in der Produktion zu vermeiden. Da sich Rails 4 nicht mehr so verhält, war es sinnvoll, die Asset-Gruppe zu entfernen.
Dies wird in dem Commit , das dies geändert hat, ausführlicher erläutert . Ich habe einige Zitate mit der tatsächlichen Antwort extrahiert.
quelle
Rails 4 versucht, Sie zu zwingen, Ihre Assets vor der Bereitstellung vorkompilieren zu müssen. Sie müssen Ihr Vermögen mit vorkompilieren
Und warum? Ich habe dies in Guide gefunden:
(Quelle: http://edgeguides.rubyonrails.org/asset_pipeline.html#in-production )
Aber oft müssen Sie diese "Assets" -Edelsteine in der Produktion verwenden. Wenn Sie beispielsweise eine js.coffee-Datei in Ihrem Ansichtsverzeichnis verwenden, benötigt Rails den Kaffee-Compiler auch im Produktionsmodus.
Ich denke, der Grund für diese Änderung ist die Leistungsverbesserung ... und sieht auch einfacher aus. :) :)
quelle
assets
Gruppe zu behalten und nicht loszuwerden (wenn Assets vorkompiliert werden, werden diese Edelsteine in der Produktion nicht benötigt und sollten nicht vom Bundler aufgenommen werden). Und ja, vielleicht würden Sie einen Edelstein wiecoffee-rails
in der Produktion verwenden ... aber das war auch in Rails 3 der Fall, oder? Und Rails 3 wird standardmäßigcoffee-rails
in dieassets
Gruppe aufgenommen. Warum also die Änderung für Rails 4?Wir wollen Coffeescript mit AJAX ( Verlauf ), also ziehen wir uns
coffee-rails
aus der Vermögensgruppe heraus.sass-rails
Fehlverhalten ( Verlauf ), so dass es aus der Vermögensgruppe herausgeht.Axt die Vermögensgruppe.
quelle
Bundler.require :assets
nicht gefahren werden. Dies ist kein Grund, eine Vermögensgruppe zu entfernen. Ich will keinen Therubyracer, libv8 usw. Warum macht jemand in der Produktion? Kaffeevorlage kann zu einer JS-Vorlage kompiliert werden, und es macht keinen Sinn, sie jedes Mal zu kompilieren, wenn ein neuer Wert ersetzt wird. Es macht keinen Sinn, all diese Last auf die Produktion zu übertragen.