2010-11-24 17 views
6

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.Rails 3 Activos de motor y estáticos

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

Los registros dicen lo siguiente (sólo 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"): 

que he hecho algunas cosas:

  1. en production.rb de mi aplicación, me puse:

    config.serve_static_assets = true

    Esto resuelve el problema pero no es lo suficientemente elegante, me gustaría ke epítelo a configuración falsa y agregue en el motor :)

  2. Seguí el consejo here sin éxito.

Respuesta

7

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.

Mire este discussion si está usando nginx como servidor web.

1

Ha intentado añadir esto a sus rieles :: clase Motor:

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

Esto se fusionará en el directorio de la gema/pública con la aplicación en tiempo de ejecución.

+0

Gracias por su respuesta, lo intenté pero no hace ninguna diferencia :) – apneadiving

5

En Rieles 3.x intenta establecer esto en config/ambientes/production.rb

config.serve_static_assets = true

Por Rails por defecto supone que está utilizando un servidor de activos (lightttp , nginx o Apache)

0

No sé mucho sobre la forma en que se empaquetan/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?

+2

Eso significa que todos los que usan su gema deben copiar manualmente los archivos públicos a su aplicación principal ... No, no es el hecho! –

3

En su motor, reemplace:

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 
1

que tenían un montaje de un motor de 3.1 Rieles problema similar. 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 

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

Cuestiones relacionadas