Perché Rails4 ha abbandonato il supporto per il gruppo “assets” nel Gemfile

In Rails 3, le gemme utilizzate esclusivamente per generare asset nella pipeline degli asset erano posizionate correttamente nel gruppo di assets del 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 

Ora, secondo la documentazione di aggiornamento (ancora in corso):

Rails 4.0 ha rimosso il gruppo di risorse da Gemfile. Dovresti rimuovere quella linea dal tuo Gemfile durante l’aggiornamento.

Abbastanza sicuro, facendo un nuovo progetto con RC1 produce un Gemfile con gemme asset-related incluse per impostazione predefinita al di fuori di qualsiasi gruppo:

 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 ... 

Significa che queste gemme verranno ora raggruppate in build di produzione per impostazione predefinita? Se è così, perché il cambio di cuore? Rails 4 si sta spostando verso la generazione dynamic di risorse in produzione?

In precedenza esisteva il gruppo di risorse per evitare la compilazione non richiesta su richiesta in produzione. Dato che Rails 4 non si comporta più così, aveva senso rimuovere il gruppo di risorse.

Questo è spiegato in maggiore dettaglio nel commit che lo ha cambiato. Ho estratto alcune citazioni con la risposta effettiva.

Alcune gemme possono essere necessarie (in produzione) come i binari del caffè se si utilizzano modelli di caffè e il fatto che ora gli asset non sono più precompilati su richiesta in produzione.

(non precompilato su richiesta in produzione) Significa che se si hanno le gemme nell’ambiente di produzione in 3.2.x e si dimentica di precompilare, Rails farà esattamente ciò che fa in fase di sviluppo, precompilando le risorse richieste. Questo non è più vero in Rails 4, quindi se non si precompilano le risorse usando le attività si otterrà un 404 quando le risorse sono richieste.

Rails 4 tenta di forzare l’utente a precompilare le risorse prima della distribuzione. Devi precompilare le tue risorse con

 $ RAILS_ENV=production bundle exec rake assets:precompile 

E perché? Ho trovato questo nella Guida:

Per impostazione predefinita, Rails presuppone che le risorse siano state precompilate e che vengano servite come risorse statiche dal tuo server web.

(Fonte: http://edgeguides.rubyonrails.org/asset_pipeline.html#in-production )

Ma molte volte devi usare queste gemme ‘assets’ nella produzione … per esempio, se usi un file js.coffee nella tua directory views, allora Rails ha bisogno anche del compilatore di caffè in modalità produzione.

Quindi, immagino, la ragione di questo cambiamento è il miglioramento delle prestazioni … e sembra anche più semplice. 🙂

Vogliamo un coffeescript con AJAX ( storia ), così i coffee-rails escono dal gruppo di attività.
sass-rails misbehaves ( history ), quindi esce dal gruppo di risorse.

Assegna il gruppo di risorse.