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 assets
groupe 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 la documentation de mise à niveau (toujours en cours) :
Rails 4.0 a supprimé le groupe d'actifs de Gemfile. Vous devrez supprimer cette ligne de votre Gemfile lors de la mise à niveau.
Effectivement, créer 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
...
Cela signifie-t-il que ces gemmes seront désormais regroupées dans les versions de production par défaut? Si oui, pourquoi ce changement d'avis? Rails 4 évolue-t-il vers la génération dynamique d'actifs en production?
asset-pipeline
ruby-on-rails-4
jemmons
la source
la source
RAILS_GROUPS=assets
(voirRails.groups
) avant la commande pour précompiler les actifs en production dans votre environnement de construction.Réponses:
Auparavant, le groupe d'actifs existait pour éviter la compilation à la demande involontaire en 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.
la source
Rails 4 essaie de vous forcer à précompiler vos actifs avant le déploiement. Vous devez précompiler vos actifs avec
Et pourquoi? J'ai trouvé ceci dans le guide:
(Source: http://edgeguides.rubyonrails.org/asset_pipeline.html#in-production )
Mais de nombreuses fois, vous devez utiliser ces gemmes «actifs» en production ... par exemple, si vous utilisez un fichier js.coffee dans votre répertoire de vues, alors Rails a également besoin d'un compilateur de café en mode production.
Donc, je suppose que la raison de ce changement est l'amélioration des performances ... et semble plus simple également. :)
la source
assets
groupe, et non pour s'en débarrasser (si les actifs sont précompilés, ces gemmes ne sont pas nécessaires en production et ne doivent pas être incluses par le bundler). Et oui, vous utiliseriez peut-être un bijou commecoffee-rails
en production ... mais c'était aussi le cas dans Rails 3, non? Et Rails 3 miscoffee-rails
dans leassets
groupe, par défaut. Alors pourquoi le changement pour Rails 4?Nous voulons coffeescript avec AJAX ( historique ), donc quitte
coffee-rails
le groupe des actifs.sass-rails
se comporte mal ( historique ), donc il sort du groupe d'actifs.Axez le groupe des actifs.
la source
Bundler.require :assets
n'est pas exécuté. Ce n'est pas une raison pour supprimer le groupe d'actifs. Je ne veux pas de therubyracer, libv8 et c. sur la production, pourquoi quelqu'un fait-il? Le modèle Coffee peut être compilé dans un modèle JS, et il n'est pas utile de le compiler chaque fois qu'une nouvelle valeur est remplacée. Il est inutile de porter tout ce fardeau à la production.