97 votes

Pourquoi Rails4 a supprimé le support du groupe "assets" dans le Gemfile ?

Dans Rails 3, les gemmes utilisées exclusivement pour générer des actifs dans le pipeline d'actifs étaient correctement placées dans le fichier assets du 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

Maintenant, selon le (toujours en cours) documentation sur la mise à niveau :

Rails 4.0 a supprimé le groupe assets du Gemfile. Vous devrez supprimer cette ligne de votre Gemfile lors de la mise à jour.

Bien sûr, la création d'un nouveau projet avec la RC1 produit un Gemfile avec des gemmes liées aux ressources incluses par défaut en dehors de tout groupe :

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

...

Cela signifie-t-il que ces gemmes seront désormais intégrées par défaut dans les constructions de production ? Si oui, pourquoi ce changement d'avis ? Rails 4 se dirige-t-il vers la génération dynamique de ressources en production ?

98voto

Filipe Giusti Points 1590

Auparavant, le groupe des actifs existait pour éviter une compilation involontaire en production. Comme Rails 4 ne se comporte plus de cette manière, il était logique de supprimer le groupe d'actifs.

Ceci est expliqué plus en détail dans la commission qui a changé ça. J'ai extrait quelques citations avec la réponse réelle.

Certaines gemmes peuvent être nécessaires (en production) comme coffee-rails si vous utilisez des templates de café. et le fait que maintenant les actifs ne sont plus précompilés à la demande en production.

(pas précompilé à la demande en production) Cela signifie que si vous avez ces gems dans un environnement de production en 3.2.x et que vous oubliez de les précompiler, Rails fera exactement ce qu'il fait en développement, précompiler les actifs demandés. Ce n'est plus vrai dans Rails 4, donc si vous ne précompilez pas les actifs en utilisant les tâches, vous obtiendrez un 404 lorsque les actifs seront demandés.

13voto

szines Points 1713

Rails 4 essaie de vous obliger à précompiler vos ressources avant le déploiement. Vous devez précompiler vos ressources avec

$ RAILS_ENV=production bundle exec rake assets:precompile

Et pourquoi ? J'ai trouvé ceci dans le Guide :

Par défaut, Rails suppose que les actifs ont été précompilés et seront servis en tant que ressources statiques par votre serveur web.

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

Mais souvent, vous devez utiliser ces gemmes 'assets' en production... par exemple, si vous utilisez un fichier js.coffee dans votre répertoire views, alors Rails a besoin du compilateur coffee en mode production également.

Je suppose donc que la raison de ce changement est l'amélioration des performances... et l'apparence plus simple également. :)

3voto

mockturtl Points 62

Nous voulons coffeescript avec AJAX ( histoire ), donc coffee-rails sort du groupe des actifs.
sass-rails se comporte mal ( histoire ), il sort donc du groupe des actifs.

Hachez le groupe des actifs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X