使用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。