web-dev-qa-db-fra.com

Pourquoi Rails4 a-t-il abandonné la prise en charge du groupe "actifs" 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 groupe 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 de mise à nivea :

Rails 4.0 a supprimé le groupe d'actifs de Gemfile. Vous devez supprimer cette ligne de votre Gemfile lors de la mise à niveau.

Effectivement, faire un nouveau projet avec RC1 donne un Gemfile avec des gemmes liées aux actifs 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

...

Est-ce à dire que ces gemmes seront désormais intégrées par défaut dans les builds de production? Si oui, pourquoi le changement de cœur? Rails 4 évolue-t-il vers la génération dynamique d'actifs en production?

96
jemmons

Auparavant, le groupe d'actifs existait pour éviter une compilation à la demande involontaire dans la production. Comme Rails 4 ne se comporte plus comme ça, il était logique de supprimer le groupe d'actifs.

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

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

(non précompilé à la demande en production) Signifie que si vous avez ces gemmes dans l'environnement de production dans 3.2.x et oubliez de précompiler, Rails fera exactement ce qu'il fait en développement, précompilez les actifs qui Ce n'est plus le cas dans Rails 4, donc si vous ne précompilez pas les ressources à l'aide des tâches, vous obtiendrez un 404 lorsque les ressources sont des demandes.

97
Filipe Giusti

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

$ Rails_ENV=production bundle exec rake assets:precompile

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

Par défaut Rails suppose que les actifs ont été précompilés et seront servis comme actifs statiques par votre serveur Web.

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

Mais souvent, vous devez utiliser ces joyaux 'actifs' en production ... par exemple, si vous utilisez un fichier js.coffee dans votre répertoire de vues, alors Rails a besoin d'un compilateur de café en mode production) ainsi que.

Donc, je suppose que la raison de ce changement est l'amélioration des performances ... et semble également plus simple. :)

13
Zoltan

Nous voulons un coffeescript avec AJAX ( historique ), donc coffee-Rails quitte le groupe d'actifs.
sass-Rails se comporte mal ( historique ), il sort donc du groupe d'actifs.

Hachez le groupe d'actifs.

3
mockturtl