2017-03-29 3 views
2

J'ai essayé autant de solutions potentielles que possible et, jusqu'à présent, rien n'a fonctionné. Le code dans le fichier .js n'est pas en cours d'exécution et n'apparaît nulle part dans le navigateur client.Impossible de charger le fichier javascript spécifique au contrôleur dans Rails (5+)

charges application.html.erb ce partielles dans la tête:

<%= csrf_meta_tags %> 
<%= stylesheet_link_tag "application", params[:controller], media: "all" %> 
<%= javascript_include_tag "application", params[:controller] %> 

config/Initialiseur/assets.rb

%w( articles password_resets sessions static_pages users).each do |controller| 
    Rails.application.config.assets.precompile += ["#{controller}.js.coffee", "#{controller}.css"] 
end 

[contrôleur-nom ici] .js

$(document).ready(function() { 
    alert('My controller'); 
}); 

Dans le navigateur, lorsque tout ce qui précède est tel qu'il est, il y aura un actif appelé '[nom du contrôleur] .self.longstringhere.j s? body = 1 '. Il aura ce code dedans:

(function() { 


}).call(this); 

... qui n'existe nulle part dans mon projet. Si je supprime le contrôleur de assets.rb, lorsque j'essaie de charger une page à partir de ce contrôleur, une erreur est générée [comme prévu]. Lorsque vous supprimez l'entrée dans la mise en page de l'application, le fichier '[controller] .self.js' est manquant dans les ressources du navigateur [comme prévu]. Cependant, le fait que les fichiers js des contrôleurs soient manquants ou non ne cause aucune erreur et n'empêche pas les ressources du navigateur d'inclure le fichier [controller] .self.js. C'est comme si les fichiers dans app/assets/javascripts étaient totalement ignorés et "écrasés".

REMARQUE: Je n'ai pas spécifiquement '// = require_tree.' et '* = require_tree.' dans les fichiers application.js/.css que je suis spécifiquement en suivant les instructions here. C'est intentionnel. J'ai également supprimé toutes les références que je peux trouver (gemmes, atouts, etc.) de turbines alors que j'ai lu que cela peut causer des problèmes qui peuvent être liés à ce problème.

J'ai également redémarré le serveur, précompilé les ressources, et j'ai fait ceci et plusieurs autres choses rituelles plusieurs fois - tout cela en vain. Pour l'enregistrement, j'ai également changé le "# {controller} .js.coffee" dans le assets.rb juste en ".js" en vain. Mais j'ai lu que ce n'est pas nécessaire de toute façon.

Ce problème concerne tous les contrôleurs - pas seulement un en particulier.

Merci pour votre aide!

[EDIT] J'ai créé un nouveau projet en utilisant des rails et des échafaudages ont suivi la même procédure (mais veiller à ce que l'actif précompilés (de posts.js) a été appelé par son nom dans spécifiquement assets.rb) et ont le même problème comme décrit ci-dessus, y compris le même code "stub" javascript dans le fichier posts.blahblah.js du navigateur.

+0

Cela devrait fonctionner, mais assurez-vous que le nom du contrôleur et le nom du fichier js/css doivent être identiques, comme si votre nom de contrôleur est 'rooms_controller.rb' alors js devrait être' rooms.coffee ou room.js etc ... ' – ashvin

+0

J'ai essayé de coder en dur le nom des ressources du contrôleur directement pour faire bonne mesure. (Rappelez-vous toujours de redémarrer le service, etc.). – vicmorrowshead

Répondre

0

On dirait que votre nom de fichier est [controller-name-here].js et que vous utilisez js pas le café.

Mais vous ajoutez un fichier café dans votre fichier config/initializers/assets.rb. C'est pourquoi il n'est pas capable de compiler correctement les fichiers.Essayez changer votre fichier config/initializers/assets.rb comme ci-dessous:

%w( articles password_resets sessions static_pages users).each do |controller| 
    Rails.application.config.assets.precompile += ["#{controller}.js", "#{controller}.css"] 
end 

tout semble bien.

+0

C'était l'une de mes premières pensées et cela n'a pas aidé. J'ai encore essayé pour faire bonne mesure. J'ai également codé en dur le nom de fichier .js du contrôleur. De toute façon, selon ce http://guides.rubyonrails.org/asset_pipeline.html#controller-specific-assets, cette précompilation est seulement nécessaire pour css et coffeescript. Celui-ci m'a fait du bien. Encore une fois, les actifs .js apparaissent dans le navigateur en tant que "stubs" comme je l'ai mentionné dans mon commentaire - pas mon code. J'ai essayé rake tmp: cache: clear aussi. – vicmorrowshead

+0

Le problème est le café-script. Je ne l'utilise pas. J'ai supprimé toutes les références (sauf la gemme). Coffeescript résout le controller-name.js lorsqu'il est précompilé. Cela provoque les fichiers du même nom à ignorer. Si je change les noms et tout mis à jour en conséquence, cela fonctionne bien. Mais, je ne peux pas me débarrasser de coffeescript. Une fois que je supprime la gemme, tout échoue (rails assets: précompile -> 'LoadError: impossible de charger un tel fichier - coffee_script', aller à l'une des pages -> 'ne peut pas charger un tel fichier - coffee_script', etc. J'ai effacé le cache, et tout ce que je peux trouver .. – vicmorrowshead

+0

Si vous avez des fichiers avec une extension de .coffee cela causera cette erreur. – Mike