asset-pipeline - rails - the asset is not present in the asset pipeline
¿Por qué Rails4 dejó de admitir el grupo de "activos" en el Gemfile? (3)
Anteriormente, el grupo de activos existía para evitar la compilació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 gemas 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 precompilan según demanda en la producción.
(no precompilado bajo demanda en producción) Significa que si tienes esas gemas en el entorno de producción en 3.2.x y olvidas precompilar, Rails hará exactamente lo que hace en el desarrollo, precompila los activos que se solicitaron. Esto ya no es verdad en Rails 4, por lo que si no precompila los activos usando las tareas, obtendrá un 404 cuando los activos sean solicitudes.
En Rails 3, las gemas 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 gemas 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 gemas ahora se incluirán en las compilaciones 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?
Rails 4 intenta obligarlo a precompilar sus activos antes de la implementación. Tienes que precompilar 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 precompilados 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 gemas ''activos'' en producción ... por ejemplo, si usa un archivo js.coffee en su directorio de vistas, entonces 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 parece más simple también. :)