ExecJS :: RuntimeError dans le moteur 3.2.8 de rails avec javascript_include_tag

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.