the rails present not images asset application asset-pipeline ruby-on-rails-4

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?


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

Axe el grupo de activos.


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. :)