No Rails 3, as gemas usadas exclusivamente para gerar ativos no pipeline de ativos foram colocadas corretamente no assets
grupo do 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
Agora, de acordo com a documentação de atualização (ainda em andamento) :
O Rails 4.0 removeu o grupo de ativos do Gemfile. Você precisa remover essa linha do seu Gemfile ao atualizar.
Com certeza, fazer um novo projeto com RC1 produz um Gemfile com joias relacionadas a ativos incluídos por padrão fora de qualquer grupo:
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
...
Isso significa que essas joias serão agrupadas em compilações de produção por padrão? Se sim, por que a mudança no coração? O Rails 4 está se movendo em direção à geração dinâmica de ativos em produção?
asset-pipeline
ruby-on-rails-4
jemmons
fonte
fonte
RAILS_GROUPS=assets
(consulteRails.groups
) antes do comando para pré-compilar ativos em produção em seu ambiente de construção.Respostas:
Anteriormente, o grupo de ativos existia para evitar a compilação sob demanda não intencional na produção. Como o Rails 4 não se comporta mais assim, fez sentido remover o grupo de ativos.
Isso é explicado com mais detalhes no commit que mudou isso. Extraí algumas citações com a resposta real.
fonte
O Rails 4 tenta forçá-lo a pré-compilar seus ativos antes da implantação. Você tem que pré-compilar seus ativos com
E porque? Eu encontrei isso no Guia:
(Fonte: http://edgeguides.rubyonrails.org/asset_pipeline.html#in-production )
Mas muitas vezes você tem que usar essas joias de 'ativos' na produção ... por exemplo, se você usar um arquivo js.coffee em seu diretório de visualizações, então o Rails precisa do compilador de café no modo de produção também.
Então eu acho que o motivo dessa mudança é a melhoria do desempenho ... e parece mais simples também. :)
fonte
assets
grupo, não se livrar dele (se os ativos forem pré-compilados, então essas joias não são necessárias na produção e não devem ser incluídas pelo bundler). E sim, talvez você usasse uma joia comocoffee-rails
na produção ... mas esse era o caso no Rails 3 também, certo? E o Rails 3 é colocadocoffee-rails
noassets
grupo, por padrão. Então, por que a mudança para Rails 4?Queremos coffeescript com AJAX ( histórico ), então
coffee-rails
sai do grupo de ativos.sass-rails
se comporta mal ( histórico ), portanto, sai do grupo de ativos.Axe o grupo de ativos.
fonte
Bundler.require :assets
não está sendo executado. Essa não é uma justificativa para remover o grupo de ativos. Eu não quero terubyracer, libv8 et c. na produção, por que alguém faz? O template do Coffee pode ser compilado para um template JS, e não faz sentido compilá-lo cada vez que um novo valor é substituído. Não adianta levar todo esse fardo para a produção.