使用javascript_include_tag在rails 3.2.8引擎中执行ExecJS :: RuntimeError

我们将两个轨道3.2.8引擎放在一个轨道应用程序中。 问题是ExecJS不喜欢布局文件中javascript_inclide_tag的命名空间。 这是导致错误的标记:

 

这里authentify是rails引擎名称。 错误是:

 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: 

如果我们删除名称空间authentify( ),则ExecJS错误消失并且rails应用程序正常工作。 使用js标记的另一个rails引擎存在相同的错误。

我们正在使用Windows环境。 什么可能导致错误? 谢谢您的帮助。

更新:

在engine.rb for authentify中,每个js库都列为:

 initializer "Authentify precompile hook", :group => :all do |app| app.config.assets.precompile += [ '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 

看到这个问题: 使用javascript_include_tag和一个充满JS的子文件夹

你有每个引擎的初始化器吗? 在这种情况下,您可以:

一个初始化程序(称之为authentify ) – 例如authentify.rb作为引擎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/",'')} 

另一个的初始化程序(称之为authentify2 ) – 例如authentify2.rb作为引擎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/",'')} 

然后你可以:

 <%= javascript_include_tag :authentify %> 

在一个布局和:

 <%= javascript_include_tag :authentify2 %> 

在另一个中,只需删除布局中的<%= javascript_include_tag 'authentify/application' %>以及其他引擎的其他javascript_include_tag标记。

问题是execjs不能在Windows 8上运行。这是一篇关于如何进入execjs运行时并在Windows 8上修复它的post。