2015-12-25 1 views
2

J'ai, dans mon répertoire app/assets, les répertoires javascripts et stylesheets, comme toute application Rails normale. Je voulais, cependant, avoir un répertoire de plugins aussi bien.Rails - Rails.root.join se conduisant mal après le déploiement

Exemple:

app/assets/plugins/myPlugin1/somefile.js 
app/assets/plugins/myPlugin1/somefile.css 

La chose est, si j'utilise

<%= javascript_include_tag 'plugins/myPlugin1/somefile.js' %> 

je recevrais une erreur 404, comme

/assets/javascripts/plugins/myPlugin1/somefile.js 

n'existe pas. J'ai alors remarqué que le répertoire "plugins" essayait d'être accessible à l'intérieur de javascripts. Je suppose que cela a quelque chose à voir avec "javascript_include_tag".

Après quelques recherches, je compris que je devais inclure cette ligne dans config/application.rb

config.assets.paths << Rails.root.join("app", "assets") 

Et il semblait travailler. Sur WEBRick, en développement, ça a fonctionné à merveille. Maintenant, j'ai été déployé avec succès sur un serveur, précompilé les actifs, et pensé que j'étais prêt à partir.

le répertoire

/public/assets/ 

a été créé. Tout dans "app/assets/javascripts", "app/actifs/feuilles de style" et "app/assets/plugins" ont été précompilée aux biens publics/

Ce qui a

app/assets/javascripts/login.js 

a pu être accès à une vue qui avait

<%= javascript_include_tag 'login.js' %> 

cE qUI N'A PAS FONCTIONNE

fichiers cela appartenait à "plugins".

app/assets/plugins/myPlugin1/somefile.js 

a été précompilée à

public/assets/myPlugin1/somefile.js 

Mais quand je couru

<%= javascript_include_tag 'plugins/myPlugin1/somefile.js' %> 

il tente d'accéder

/javascripts/plugins/myPlugin1/somefile.js 

lorsque le bon chemin, d'après mon expérience dans le développement , serait:

/myPlugin1/somefile-(some hex hash).js 

Donc, comme vous pouvez le voir, dans la production, je suis dans la même question que quand je ne l'ai pas ajouté

config.assets.paths << Rails.root.join("app", "assets") 

à application.rb

Que pourrait être le problème?

Répondre

1

Vous pouvez aller dans cette voie:

Dir.glob("#{Rails.root}/app/assets/plugins/**/").each do |path| 
    config.assets.paths << path 
end 

Ou régler chaque plug-in, un par un comme:

config.assets.paths << Rails.root.join("app", "assets", "plugins", "myPlugin") 

Mais si vous avez des sous-répertoires de ce répertoire myPlugin ne serait pas charger chaque fichier. Donc, la première option pourrait être mieux pour vous.

+0

Essayé pour Dir.glob ("# {Rails.root}/app/assets/tableau de bord ** /"). Each do | path | 'mais ne pouvait pas voir les actifs de dossier dans la console avec' Rails .application.config.assets.paths' – vipin8169

+0

manque-t-il un '/' avant que ces deux * ou que les deux * ne soient après la dernière barre oblique? – cassioscabral

+0

Non, j'ai essayé 'Dir.glob (" # {Rails.root }/app/assets/dashboard/**/"). each do | path |' ainsi que 'Dir.glob (" # {Rails.root}/app/assets/**/*/"). | path | 'et quelques autres combinaisons – vipin8169