0

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

<%= javascript_include_tag 'authentify/application' %>

这里 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: <head>
4:   <title>Login</title>
5:   <%= stylesheet_link_tag    "authentify/application" %>
6:   <%= javascript_include_tag "authentify/application" %>
7:   <%= csrf_meta_tags %>
8: </head>
9: 

如果我们删除命名空间 authentify ( <%= javascript_include_tag "application" %>),那么 ExecJS 错误就会消失,rails 应用程序可以正常工作。另一个带有 js 标签的 rails 引擎也有同样的错误。

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

更新:

在用于身份验证的 engine.rb 中,每个 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
4

2 回答 2

1

看到这个问题:Using javascript_include_tag with a Subfolder full of 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其他引擎的其他标签。

于 2012-11-26T10:33:54.530 回答
1

问题是 execjs 在 Windows 8 上不起作用。这是一篇关于如何进入 execjs 运行时并在 Windows 8 上修复它的帖子。

于 2012-11-27T00:48:54.227 回答