Nous mettons en place deux moteurs 3.2.8 de rails dans une application de rails. Le problème est qu’ExecJS n’aime pas l’espace de noms pour javascript_inclide_tag dans le fichier de mises en forme. Voici la balise à l’origine de l’erreur:
Ici, authentifiez est le nom du moteur de rails. L’erreur est:
ExecJS::RuntimeError in Authentify/sessions#new Showing C:/D/code/rails_proj/engines/authentify/app/views/layouts/sessions.html.erb where line #6 raised: (in C:/D/code/rails_proj/engines/authentify/app/assets/javascripts/authentify/sessions.js.coffee) Extracted source (around line #6): 3: 4: Login 5: 6: 7: 8: 9:
Si nous supprimons l’authentification de l’espace de noms ( ), l’erreur ExecJS disparaît et l’application rails fonctionne. La même erreur se produit pour un autre moteur de rails avec la balise js.
Nous utilisons l’environnement Windows. Qu’est-ce qui pourrait causer l’erreur? Merci pour l’aide.
METTRE À JOUR:
Dans engine.rb pour authentifier, toutes les bibliothèques js sont répertoriées comme suit:
initializer "Authentify precomstack hook", :group => :all do |app| app.config.assets.precomstack += [ 'authentify/application.css.scss', 'authentify/layout.css.scss', 'authentify/login.css.scss', 'authentify/paginate.css.scss', 'authentify/sessions.css.scss', 'authentify/sys_logs.css.scss', 'authentify/toolbar.css.scss', 'authentify/user_level_group_map.css', 'authentify/user_menus.css.scss', 'authentify/users.css.scss', 'authentify/application.js', 'authentify/sessions.js.coffee', 'authentify/sys_logs.js.coffee', 'authentify/user_level_group_map.js', 'authentify/user_menus.js.coffee', 'authentify/users.js'] end
Voir cette question: Utilisation de javascript_include_tag avec un sous-dossier plein de JS
Pouvez-vous avoir un initialiseur pour chaque moteur? Dans ce cas, vous pourriez avoir:
Initializer for one (appelez-le authentify
) – par exemple, authentify.rb en tant qu’initialiseur pour le moteur A:
ActionView::Helpers::AssetTagHelper.register_javascript_expansion :authentify => Dir["#{Rails.root.to_s}/public/javascripts/authentify/*.js"].each {|js| js.gsub!("#{Rails.root.to_s}/public/javascripts/",'')}
Initialiseur pour l’autre (appelez-le authentify2
) – par exemple, authentify2.rb en tant qu’initialiseur pour le moteur B:
ActionView::Helpers::AssetTagHelper.register_javascript_expansion :authentify2 => Dir["#{Rails.root.to_s}/public/javascripts/authentify2/*.js"].each {|js| js.gsub!("#{Rails.root.to_s}/public/javascripts/",'')}
et alors vous pouvez avoir:
<%= javascript_include_tag :authentify %>
dans une disposition et:
<%= javascript_include_tag :authentify2 %>
dans l’autre, supprimez simplement <%= javascript_include_tag 'authentify/application' %>
dans votre mise en page, ainsi que l’autre balise javascript_include_tag
de votre autre moteur.
Le problème est que execjs ne fonctionne pas sur Windows 8. Voici un article sur la procédure à suivre pour exécuter les exécutions de execjs et le corriger sous Windows 8.