0

2 つの Rails 3.2.8 エンジンを 1 つの 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

問題は、execjs が Windows 8 で動作しないことです。これは、execjs ランタイムにアクセスして Windows 8 で修正する方法に関する投稿です。

于 2012-11-27T00:48:54.227 に答える
1

この質問を参照してください: Using javascript_include_tag with a Subfolder full of JS

各エンジンのイニシャライザを使用できますか? その場合、次のことができます。

1つのイニシャライザ(それを呼び出しますauthentify)-たとえば、エンジンAの1つのイニシャライザとしてのauthentify.rb:

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) - たとえば、エンジン B の 1 つのイニシャライザとしての authentify2.rb:

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 %>

1 つのレイアウトで:

<%= javascript_include_tag :authentify2 %>

他のエンジンの他のタグ<%= javascript_include_tag 'authentify/application' %>と同様に、レイアウトの を削除するだけです。javascript_include_tag

于 2012-11-26T10:33:54.530 に答える