the rails present not images asset ruby-on-rails-3 static assets rails-engines

ruby-on-rails-3 - rails - the asset is not present in the asset pipeline



Rails 3 motor y activos estáticos (6)

¿Has intentado agregar esto a tu clase de Rails :: Engine:

initializer "static assets" do |app| app.middleware.use ::ActionDispatch::Static, "#{root}/public" end

Esto se combinará en el directorio de tu Gema / público con la aplicación en tiempo de ejecución.

Estoy construyendo un motor que he agrupado como una gema (gmaps4rails). Copié el / public de mi motor en la aplicación / public of my rails.

Todo funciona bien en el desarrollo pero no funciona en la producción: parece que no se encuentran los activos estáticos (de mi motor y mi aplicación principal).

Los registros dicen lo siguiente (solo un resumen):

Started GET "/javascripts/application.js?1286294679" for 127.0.0.1 at Wed Nov 24 00:22:20 +0100 2010 ActionController::RoutingError (No route matches "/javascripts/application.js"): Rendered /Users/me/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/gems/1.8/gems/actionpack-3.0.3/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (1.1ms) Started GET "/stylesheets/gmaps4rails.css?1290554221" for 127.0.0.1 at Wed Nov 24 00:22:20 +0100 2010 ActionController::RoutingError (No route matches "/stylesheets/gmaps4rails.css"):

He hecho algunas cosas:

  1. en production.rb de mi aplicación, establecí:

    config.serve_static_assets = true

    Esto resuelve el problema, pero no es lo suficientemente elegante, me gustaría mantenerlo en falso y agregar configuración en el motor :)

  2. Seguí el consejo aquí sin éxito.


En Rails 3.x intente configurar esto en config / environments / production.rb

config.serve_static_assets = true

De forma predeterminada, Rails asume que está utilizando un servidor de activos (lightttp, nginx o Apache)


En tu motor, reemplaza:

initializer "static assets" do |app| app.middleware.use ::ActionDispatch::Static, "#{root}/public" end

con:

initializer "static assets" do |app| app.middleware.insert_before(::ActionDispatch::Static, ::ActionDispatch::Static, "#{root}/public") end


No sé mucho sobre la forma en que se embalan / fabrican las gemas. Pero ¿por qué no puedes copiar las imágenes / js / css de tu carpeta pública gems en la carpeta pública de aplicaciones? Simplemente lo hice y funcionó para mí. ¿No es eso lo hecho?


Por razones de rendimiento, los activos estáticos que sirven están deshabilitados en el modo de producción. Su servidor web debe estar configurado para servir estos activos.

Mira esta discusión si estás usando nginx como un servidor web.


Tuve un problema similar montando un motor Rails 3.1. Estaba recibiendo activos en blanco en el escenario y la producción.

Encontré una solución en http://jonswope.com/2010/07/25/rails-3-engines-plugins-and-static-assets/comment-page-1/#comment-87 y la ajusté para adaptarme a Rails 3.1 ubicaciones de activos:

initializer "static assets" do |app| app.middleware.insert_before ::Rack::Lock, ::ActionDispatch::Static, "#{root}/app/assets" end

Me imagino que hay una manera más elegante, pero mi esfuerzo de hoy no produjo nada sustancial.