Domanda

Sto costruendo un motore che ho in bundle come una gemma (gmaps4rails). Ho copiato il / pubblico del mio motore in / pubblico del mio rotaie app.

Tutto funziona bene in fase di sviluppo, ma non riesce a lavorare in produzione:. Sembra beni statici (del mio motore e la mia applicazione principale) non sono trovate

I registri narra la seguente (solo un estratto):

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

Ho fatto un paio di cose:

  1. in production.rb di mia app, ho impostato:

    config.serve_static_assets = true

    Questo risolve il problema, ma non è abbastanza elegante, mi piacerebbe tenerlo per falso e aggiungere la configurazione del motore:)

  2. Ho seguito il consiglio qui senza successo.

È stato utile?

Soluzione

Per motivi di prestazioni, le attività statiche che serve è disattivata in modalità di produzione. Proprio server web deve essere configurato per servire tesi beni.

Guardate questa discussione se stai usando nginx come un server web.

Altri suggerimenti

In Rails 3.x tenta di impostare questo in config / ambienti / production.rb

  

config.serve_static_assets = true

Per impostazione predefinita Rotaie presume l'utilizzo di un server attivi (lightttp, nginx o Apache)

Nel vostro motore, sostituire:

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

Hai provato l'aggiunta di questo alla classe Rails :: Motore:

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

Questo si fonderà nella directory / pubblico del gioiello con l'applicazione in fase di esecuzione.

Ho avuto un montaggio a Rails 3.1 motore problema simile. Stavo ricevendo beni vuoti in fase e della produzione.

Ho trovato una soluzione al http://jonswope.com/2010/07/25/rails-3-engines-plugins-and-static-assets/comment-page-1/#comment-87 e ottimizzato per seme Rails 3.1 sedi di attività:

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

immagino ci sia un modo più elegante, ma il mio impegno oggi non ha dato nulla di sostanziale.

Non so molto circa il modo in cui, le gemme sono confezionati / fatta. Ma perché non si può copiare il / roba di immagini / js css delle tue gemme cartella pubblica nella cartella pubblica applicazioni? Ho appena fatto questo e ha funzionato per me. Non è forse la cosa fatta?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top