¿Por qué Rails4 dejó de admitir el grupo de “activos” en el Gemfile?

En Rails 3, las gems utilizadas exclusivamente para generar activos en la cartera de activos se colocaron correctamente en el grupo de 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 

Ahora, según la documentación de actualización (aún en curso):

Rails 4.0 eliminó el grupo de activos de Gemfile. Tendría que eliminar esa línea de su Gemfile al actualizar.

Efectivamente, hacer un nuevo proyecto con RC1 produce un Gemfile con gems relacionadas con activos incluidas por defecto fuera de cualquier 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 ... 

¿Esto significa que estas gems ahora se incluirán en las comstackciones de producción por defecto? Si es así, ¿por qué el cambio de corazón? ¿Se está moviendo Rails 4 hacia la generación dinámica de activos en producción?

Anteriormente, el grupo de activos existía para evitar la comstackción no intencional a demanda en la producción. Como Rails 4 ya no se comporta así, tiene sentido eliminar el grupo de activos.

Esto se explica con más detalle en el compromiso que cambió eso. Extraje algunas citas con la respuesta real.

Algunas gems pueden ser necesarias (en producción) como barras de café si está utilizando plantillas de café y el hecho de que ahora los activos ya no se precomstackn según demanda en la producción.

(no precomstackdo bajo demanda en producción) Significa que si tienes esas gems en el entorno de producción en 3.2.x y olvidas precomstackr, Rails hará exactamente lo que hace en el desarrollo, precomstack los activos que se solicitaron. Esto ya no es verdad en Rails 4, por lo que si no precomstack los activos usando las tareas, obtendrá un 404 cuando los activos sean solicitudes.

Rails 4 intenta obligarlo a precomstackr sus activos antes de la implementación. Tienes que precomstackr tus activos con

 $ RAILS_ENV=production bundle exec rake assets:precompile 

¿Y por qué? Encontré esto en la Guía:

De forma predeterminada, Rails asume que los activos han sido precomstackdos y serán servidos como activos estáticos por su servidor web.

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

Pero muchas veces tiene que usar estas gems ‘activos’ en producción … por ejemplo, si usa un archivo js.coffee en su directorio de vistas, entonces Rails también necesita un comstackdor de café en modo de producción.

Así que supongo que la razón de este cambio es la mejora del rendimiento … y parece más simple también. 🙂

Queremos coffeescript con AJAX ( historial ), por lo que coffee-rails se retira del grupo de activos.
sass-rails comporta mal ( historial ), por lo que se mueve fuera del grupo de activos.

Axe el grupo de activos.