2010-11-24 5 views
6

Je construis un moteur que j'ai empaqueté comme une gemme (gmaps4rails). J'ai copié le/public de mon moteur dans l'application/public de mes rails.Rails 3 Actifs moteur et statique

Tout fonctionne bien en développement, mais ne fonctionne pas en production: il semble que les actifs statiques (de mon moteur & mon application principale) ne sont pas trouvés.

Les journaux disent ce qui suit (juste un résumé):

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

Je l'ai fait quelques petites choses:

  1. dans la production.rb de mon application, je mets:

    config.serve_static_assets = true

    Ceci résout le problème mais n'est pas assez élégant, je voudrais ke ep il à faux et ajouter la configuration dans le moteur :)

  2. J'ai suivi le conseil here sans succès.

Répondre

7

Pour des raisons de performances, la diffusion des actifs statiques est désactivée en mode de production. Votre serveur Web doit être configuré pour servir ces ressources.

Regardez ce discussion si vous utilisez nginx comme serveur Web.

1

Avez-vous essayé d'ajouter ceci à votre Rails :: classe Moteur:

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

Cela fusionnera dans votre répertoire de Gem/public avec l'application lors de l'exécution.

+0

Merci pour votre réponse, j'ai essayé mais cela ne fait aucune différence :) – apneadiving

5

3.x Rails essayer de le définir dans config/environnements/production.rb

config.serve_static_assets = true

Par défaut Rails suppose que vous utilisez (lightttp un serveur actif , nginx ou Apache)

0

Je ne connais pas grand-chose à la façon dont les gemmes sont emballées/fabriquées. Mais pourquoi ne pouvez-vous pas copier le contenu images/js/css de votre dossier public gems dans le dossier public apps? Je l'ai fait et ça a marché pour moi. Est-ce que ce n'est pas fait?

+2

Cela signifie que tout le monde qui utilise votre gemme doit copier manuellement les fichiers publics sur leur application principale ... Non ce n'est pas le chose faite! –

3

Dans votre moteur, remplacer:

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

avec:

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