En Rails 3, las gemas utilizadas exclusivamente para generar activos en la canalización de activos se colocaron correctamente en el assets
grupo 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, de acuerdo con la documentación de actualización (aún en progreso) :
Rails 4.0 eliminó el grupo de activos de Gemfile. Debería eliminar esa línea de su Gemfile al actualizar.
Efectivamente, hacer un nuevo proyecto con RC1 produce un Gemfile con gemas relacionadas con activos incluidas de forma predeterminada 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
...
¿Significa esto que estas gemas ahora se incluirán en construcciones de producción de forma predeterminada? Si es así, ¿por qué el cambio de opinión? ¿Rails 4 avanza hacia la generación dinámica de activos en producción?
asset-pipeline
ruby-on-rails-4
jemmons
fuente
fuente
RAILS_GROUPS=assets
(verRails.groups
) antes del comando para precompilar activos en producción en su entorno de compilación.Respuestas:
Anteriormente, el grupo de activos existía para evitar la compilación a pedido no intencionada en la producción. Como Rails 4 ya no se comporta así, tenía 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.
fuente
Rails 4 intenta obligarlo a precompilar sus activos antes de la implementación. Tiene que precompilar sus activos con
¿Y por qué? Encontré esto en Guide:
(Fuente: http://edgeguides.rubyonrails.org/asset_pipeline.html#in-production )
Pero muchas veces tiene que usar estas gemas de 'activos' en producción ... por ejemplo, si usa un archivo js.coffee en su directorio de vistas, Rails también necesita un compilador de café en modo de producción.
Así que supongo que la razón de este cambio es la mejora del rendimiento ... y también parece más simple. :)
fuente
assets
grupo, no deshacerse de él (si los activos están precompilados, entonces estas gemas no son necesarias en producción y no deben ser incluidas por el agrupador). Y sí, tal vez usarías una gema comocoffee-rails
en producción ... pero ese también fue el caso en Rails 3, ¿verdad? Y Rails 3 pusocoffee-rails
en elassets
grupo, por defecto. Entonces, ¿por qué el cambio de Rails 4?Queremos un coffeescript con AJAX ( historial ), por lo que
coffee-rails
se sale del grupo de activos.sass-rails
se porta mal ( historial ), por lo que se mueve fuera del grupo de activos.Elimine el grupo de activos.
fuente
Bundler.require :assets
no se está ejecutando. Esa no es una razón para eliminar el grupo de activos. No quiero therubyracer, libv8 et c. en producción, ¿por qué alguien lo hace? La plantilla de café se puede compilar en una plantilla JS, y no tiene sentido compilarla cada vez que se sustituye un nuevo valor. No tiene sentido llevar toda esta carga a la producción.